Deoarece tranzacția se execută
Baza de date are o zonă specială de date, care se numește TIP (Transaction Inventarul pagina tranzacție -Inventarnaya). La începutul tranzacției, acesta este atribuit un identificator (TID, ID-ul tranzacției) - numărul de inventar, care este stocat în vârf. În acest caz, chiar la ultima tranzacție va fi cel mai mare identificator. TIP, în plus față de numerele pentru a începe o tranzacție este salvat și statutul său, care poate fi activ (în lucrare), savarsite (confirmat), prăvălit (Canceled, revocați), iar în Limbo (nesigură).
Se numește tranzacție activă care rulează în prezent.
A confirmat tranzacția se numește, care a finalizat cu succes activitatea, de regulă, la comanda Commit.
Apelul a fost anulat tranzacția care a eșuat. În același timp rola înapoi de acțiune a făcut de obicei, echipa RollBack.
tranzacție nedeterminate tranzacție (Limb) apel care funcționează simultan cu două sau mai multe baze de date. La finalizarea acestei tranzacții, o confirmare a Interbase efectuează o comitere în două faze, asigurându-se că orice modificări vor fi făcute în toate bazele de date sau în orice. În acest caz, confirmarea în bazele de date vor fi date la un moment dat. Dacă în acest moment nu există o eroare de sistem, este posibil ca modificările bazei de date publice au fost făcute și în ceea ce nu este. În acest caz, tranzacția intră într-o stare nedeterminată atunci când serverul nu știe dacă este sau nu pentru a confirma tranzacția sau rola înapoi.
Fiecare loc de muncă tranzacție de pornire, creează propria versiune a intrărilor de masă, care funcționează. Versiunea de înregistrare - este o copie a unei înregistrări care este creat atunci când tranzacția încearcă să-l schimbe. Astfel, fiecare intrare de tabel poate avea potențial mai multe versiuni, fiecare cu versiunea sa proprie de tranzacție de lucru al acestei înregistrări. În cazul în care tranzacția se schimbă datele, se schimbă propria lor versiune a înregistrării, mai degrabă decât în original. Mai mult, tranzacția poate confirma sau anula.
În cazul în care tranzacția este confirmată, marca anterioară a Interbase încercați înregistrarea originală se elimină, iar versiunea a tranzacției finalizate - ca originalul. Când Interbase salvează modificările, noua intrare este plasat, iar ID-ul de tranzacție, care a făcut aceste schimbări (orice linie a tabelului conține ID-ul tranzacției pe care a creat-o).
În cazul în care tranzacția eșuează, înregistrarea originală și rămășițele originale.
În cazul în care tranzacția citește numai o înregistrare, fără a încerca să-l schimbe, nu creează propria sa versiune pentru ea.
Cu toate acestea, pot exista conflicte și tranzacții. Să presupunem că a început tranzacția T1. Ea a creat o versiune a înregistrării, și a schimbat datele sale. În acest moment, a lansat o tranzacție T2 concurente, și-a creat o versiune a aceluiași înregistrare. Deoarece T1 nu este terminat încă, T2 nu a putut vedea datele de la începutul modificărilor făcute de T1, și, prin urmare, și-a creat propria sa versiune a vechiului original. T1 este acum finalizarea Commit. Ce ar trebui să Interbase? În cazul în care va marca versiunea T1 de înregistrare ca originalul, dar recordul vechi este șters, acesta va fi date false în versiunea T2! Acțiuni Interbase în acest caz va depinde de parametrii tranzacției, așa cum va fi discutat mai jos mai detaliat.
În cazul în care o tranzacție elimină unele șir de caractere, șirul nu este îndepărtat fizic din baza de date, ci mai degrabă este marcat ca fiind șters, păstrarea și numărul de tranzacții eliminate ei. În cazul în care tranzacția eșuează, eliminarea linia reală nu se produce, deoarece nu a existat nici o confirmare.
Astfel, se spune că o arhitectură multi-versiunea Interbase (MGA - Multi Generation Architecture). Această arhitectură vă permite să organizați lucrul cu baza de date, astfel încât utilizatorii să nu blocheze cititorii care scriu. În plus, în caz de eșec al sistemului, de Interbase pentru a recupera rapid, tocmai pentru că MGA. Apropo, acesta este primul dintre Interbase SQL-server care suportă arhitectura multi-versiune.
Împreună cu avantajele unei astfel de abordări, în baza de date cu datele de timp se acumulează „junk“. Fiecare tranzacție care încearcă să actualizeze datele, creează propria versiune a liniilor, iar dacă nu avea grijă de eliminarea la timp a mai vechi, versiuni deja inutile ale bazei de date va fi în curând doar înfundate moloz.
Dar cum să eliminați gunoiul? Pot elimina versiunea tranzacției, care a fost finalizat, cu succes sau fără succes? Nu, în cazul în care această versiune este utilizată în prezent de către alte tranzacții. Mai târziu, vom vorbi despre nivelurile de izolare de tranzacție, în timp ce doar spun că unele tranzacții pot vedea modificările făcute de alții, nu au fost încă confirmate de tranzacții activă.
Să presupunem că a început tranzacția Tl. Această tranzacție a creat o versiune a înregistrării și modificați-l. Mai târziu, a început o tranzacție T2, care este configurat astfel încât să puteți vedea toate modificările, nici măcar nu a confirmat. Ea a apelat la aceeași înregistrare, și pentru că vrea să vadă cele mai recente modificări, acesta oferă versiunea tranzacție Tl. Apoi Tl a încheiat activitatea, dar T2 este încă de lucru cu versiunea sa de înregistrare, prin urmare, această versiune nu poate fi ștearsă.
În prezent Interbase mecanism pentru îndepărtarea versiunile vechi, care rulează noi tranzacții. Noua tranzacție prin care solicită o înregistrare, citește toate versiunile acestei înregistrări. În acest caz, se face o verificare dacă tranzacția a fost de a face această versiune a anulat (rollback) sau confirmat (Commit). În cazul în care tranzacția a fost anulată, astfel încât această versiune - resturile care trebuie să fie eliminate. Dacă există mai multe versiuni, face o tranzacție de confirmare, data considerată a fi versiunea cu cea mai mare ID-ul tranzacției. Alte versiuni sunt considerate depășite și sunt, de asemenea, supuse îndepărtării.
Astfel, tanara Transaction curat baza de date a resturilor lăsate de tranzacții mai mari. Dar ei nu curățați toată versiunea veche într-un rând, dar numai versiunea de înregistrare (sau înregistrări), la care se adresează.
Deoarece serverul poate fi efectuată simultan o multitudine de tranzacții are o definiție terminologie a acestor tranzacții.
• tranzacție activă - o tranzacție care a început, dar nu a fost încă finalizat.
• tranzacția părților interesate - o tranzacție este în concurență cu tranzacția curentă.
• Cea mai veche tranzacție activă - este o astfel de tranzacție activă, care a început mai devreme decât altele. Oricum, aceasta este o tranzacție activă la cel mai mic ID.
• Cea mai veche tranzacție în cauză - este o astfel de tranzacție interesată care a început înaintea altora. Oricum, este preocupat de cel mai mic ID-ul tranzacției.
În acest context, de colectare a gunoiului a fost cea mai veche tranzacție activă. Deoarece versiunile de înregistrare realizate de tranzacție mai tineri, nu se poate vedea, apoi indeparteaza resturile lăsate de alte tranzacții mai mari. În cazul în care tranzacția sa încheiat activitatea sa, statutul de „cele mai vechi active“ se mută la următoarea tranzacție. Astfel, tranzacția se transmite una de alta taxa de colectare a gunoiului.