Toate sistemele DBMS industriale moderne și o parte din suportul desktop lucrează cu tranzacții. Mecanismul tranzacțiilor este important în multe feluri. În acest curs, îl vom examina din două perspective, ca bază pentru restabilirea integrității bazelor de date și ca parte a unui mecanism de gestionare a lucrărilor simultane cu date de la mai mulți utilizatori. Dar, pentru a înțelege rolul tranzacțiilor, este extrem de important să considerăm tranzacțiile ca atare. Mai întâi, să oferim o definiție a conceptului de "transcriere".
Tranzacție - (tranzacție în limba engleză) - un grup de operații secvențiale cu o bază de date, care este o unitate logică de lucru cu date. Tranzacția trebuie executată în întregime sau cu succes, respectând integritatea datelor și indiferent de celelalte tranzacții care se desfășoară în paralel sau care nu au fost efectuate deloc și apoi nu ar trebui să aibă niciun efect. Tranzacția muta baza de date dintr-o stare consecventă în alta.
Adică, o tranzacție, indiferent de numărul operațiunilor sale constitutive, este percepută ca un întreg, și poate fi fie completat în întregime executată cu succes sau deloc, în cazul în care, în cazul în care, în oricare dintre operațiunile eșuează. Dacă tranzacția are succes, tranzacția este fixată, operația "commit" este efectuată. În cazul unei defecțiuni, acțiunile deja efectuate sunt anulate și tranzacția este derulată, operația "rollback" este efectuată.
Cel mai popular exemplu al unei tranzacții care ajută la o mai bună înțelegere a esenței sale și extrem de importantă este funcționarea transferului de fonduri între conturile bancare.
Iată una dintre posibilele secvențe de acțiuni necesare pentru a efectua această operație:
1. Verificați disponibilitatea contului, de la care se presupune că trebuie să scrie banii și suficiența fondurilor. Aceasta este o operație de citire a datelor, posibil din mai multe tabele).
2. Verificați disponibilitatea contului, care ar trebui să fie creditat (de exemplu, contul trebuie închis, blocat temporar etc.). Aceasta este, de asemenea, o operație de citire a datelor.
3. Reduceți soldul contului sursă. Aceasta este o operație de modificare a datelor.
4. Creșteți valoarea soldului din contul de primire. Aceasta este o operație de modificare a datelor.
5. Creați o înregistrare a operațiunii efectuate în jurnalul de tranzacții. Aceasta este operația de creare a unei noi înregistrări.
Puteți sugera alte opțiuni pentru a face această operațiune, dar principalul lucru este că întreaga secvență trebuie fie executată, fie nu trebuie efectuată nici o operație. Evident, dacă oprim, de exemplu, la pasul 4, atunci fondurile din contul sursă vor dispărea pur și simplu - vor fi eliminate "nicăieri". Adică, coerența datelor va fi încălcată. În același timp, este extrem de important să se asigure că nu se efectuează alte tranzacții în timp ce tranzacția este în desfășurare cu conturile implicate. În cazurile ?? e, în cazul în care, după ce am verificat există fonduri suficiente în contul, sursa, fondurile vor fi debitate din acesta printr-o altă operație - ne ?? din nou în curând în întregime din întâlnirea sa cu consistență afectată.
Desigur, mecanismul de sprijin de tranzacție trebuie să fie punct de vedere tehnic foarte dificil - în cazul în care zeci sau sute de utilizatori ?? s și mii de referințe la datele pentru a asigura independența acestor trimiteri la reciproc, precum și capacitatea de a anula și a reveni baza de date la starea inițială nu este ușor. Pentru punerea în aplicare a acestui mecanism pot fi utilizate diferite mecanisme, dar există proprietăți pe care trebuie să le aibă tranzacțiile și sistemul de susținere. De obicei, pentru a desemna aceste proprietăți, se utilizează abrevierea ACID - Atomicitate, Consistență, Izolare, Durabilitate. În traducere în limba rusă - Atomicitate, Coerență, Izolare și Longevitate. Să luăm în considerare aceste proprietăți în detaliu.
Atomicitatea înseamnă doar indivizibilitatea tranzacției și cerința fie de ao îndeplini în totalitate, fie de a nu efectua deloc. Am spus deja suficient despre importanța crucială a acestei proprietăți și nu este foarte important să descifrăm mai mult acest concept.
Coerența este un concept destul de complex, ceva mai larg decât conceptul de integritate a datelor. În cazul în care integritatea datelor - performanța ϶ᴛᴏ Sun ?? ex disponibile în constrângerile de integritate a bazei de date (vnutrizapisnyh, mezhzapisnyh, constrângeri cheie străine, și așa mai departe), consecvența înseamnă, de asemenea, conformitatea cu baza de date regulile de business. În special, constrângerile de integritate poate fi urmată de o interdicție privind soldul negativ al contului (de exemplu, atributul corespunzător), dar, de exemplu, solicitând ca suma debitate și creditate atunci când transferul de fonduri din contul în contul - ϶ᴛᴏ o regulă de afaceri, ĸᴏᴛᴏᴩᴏᴇ la ajuta constrângerile de integritate să nu se exprime.
Așa cum am menționat deja, se presupune că tranzacția transferă baza de date dintr-o stare convenită la alta, dar trebuie furnizată de către programatori care precizează succesiunea operațiilor. Rolul SGBD aici este de a se asigura că toate operațiunile au succes (sau nu au fost realizate deloc). În același timp, în procesul de transformare, baza de date poate trece printr-un număr de state necoordonate (de exemplu, în exemplul de mai sus cu transfer de fonduri, sistemul nu este coordonat după operația 3 înainte de operațiunea 4).
Izolarea - Proprietatea tranzacției este executată independent unul de altul. Aceasta înseamnă că, în timpul executării unei singure tranzacții, altele nu pot afecta rezultatul executării acesteia. Asigurarea independenței perfecte a tranzacțiilor unul față de celălalt necesită resurse corespunzătoare și afectează negativ viteza operațiunilor de date, deci există mai multe așa-numite nivele de izolare care vor fi discutate mai târziu.
Longevitate - Proprietatea tranzacției este stocată în sistem "după" după terminarea cu succes. Este evident că în procesul de baze de date pot apărea erori de hardware, pene de curent, alte erori, dar este garantat că, dacă un mesaj cu privire la finalizarea cu succes a tranzacției, modificările aduse acesteia în datele salvate în orice caz și atunci când starea bazei de date va fi restabilită după aceste schimbări nu vor dispărea nicăieri. Desigur, nu vorbim despre cazurile în care purtătorul de informații pe care se afla baza de date a eșuat complet și a trebuit să fie restaurat dintr-o copie de rezervă. Deși chiar și în aceste cazuri, după cum va fi discutat mai târziu, tranzacțiile executate sunt uneori restaurate.
Acum, după revizuirea conceptului tranzacției și a proprietăților sale de bază, putem continua să discutăm despre utilizarea tranzacțiilor pentru implementarea unei recuperări a bazei de date după un eșec și pentru organizarea operării paralele a mai multor utilizatori.