Sunteți pe pagina 1din 30

Capitolul 5: Gestiunea tranzactiilor

Tranzactii
Anomalii de acces concurent la bazele de date
Actualizare pierduta
Citire improprie
Citire irepetabila
Citire fantoma
Proprietatile tranzactiilor
Operatiile efectuate de tranzactii
Starile tranzactiilor
Planificarea tranzactiilor
Tehnici de control al concurentei
Controlul concurentei prin blocare
Controlul concurentei prin marci de timp
Tehnici de refacere a bazelor de date

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 1


Tranzactii
n mod obinuit, un sistem SGBD deservete mai muli utilizatori, care
acceseaz concurent datele din tabele
Execuia concurent a mai multor procese poate avea loc:
ntr-un sistem uniprocesor, prin partajarea (mprirea) timpului de execuie al
procesorului ntre mai multe procese (multiprogramare)
ntr-un sistem multiprocesor, n care mai multe procese pot fi executate n mod
real simultan, pe mai multe procesoare ale sistemului (multiprocesare)
O tranzacie (transaction) este o unitate logic de prelucrare indivizibil
(atomic) a datelor unei baze de date prin care se asigur consistena
acesteia
O tranzacie trebuie s asigure consistena bazei de date in diferite situatii:
tranzactia se execut individual sau concurent cu alte tranzacii
apar defecte ale sistemului n cursul execuiei tranzaciei
O tranzacie este o operaie indivizibil de acces la baza de date care:
fie se execut cu succes toate aciunile i se termin cu o validare a modificrilor
efectuate asupra bazei de date (commit)
fie nu poate efectua (din diferite motive) toate aciunile i este abandonat i
anulat (abort, rollback)

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 2


Exemplu de tranzactie
Exemplu: un sistem de rezervare a locurilor la curse aeriene
PASAGERI (IdPasager, Nume, Prenume, Adresa)
CURSE (IdCursa, AeroportPlecare, AeroportSosire, DataCursa, NrLocuriLibere)
FACTURI (IdFactura, IdPasager, IdCursa, DataFactura, Pret)
Pentru rezervarea unui loc se efectueaz mai multe operaii:
1. Se insereaz o linie nou n tabelul PASAGERI, cu datele pasagerului
2. Dac exist locuri libere la cursa dorit, atunci se face propriu-zis rezervarea,
prin inserarea unei linii noi n tabelul FACTURI; altfel, nu se face rezervarea
3. Se tipreste factura
4. Se emite (tiprete) biletul
Probleme care pot sa apara:
Dac sistemul se defecteaz dup ce s-a executat pasul 2, s-a fcut o rezervare,
dar biletul nu a fost facturat i nici emis
Dac defeciunea are loc dup pasul 3, clientului i se trimite factura, dar el nu a
primit biletul
Dac nu se defecteaz sistemul, dar doi ageni de vnzri atribuie acelai loc la
doi pasageri diferii, atunci vor fi probleme la mbarcarea pasagerilor
Astfel de probleme ar disparea dac toate actiunile efectuate pentru o
rezervare ar fi grupate ca o operaie indivizibil (atomic)
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 3
Anomalii de acces concurent la bazele de date (1)
Unitatea de transfer a datelor ntre discul magnetic i memoria principal a
sistemului este un bloc, care corespunde unui sector de pe disc si in care
se memoreaza mai multe inregistrari (tupluri)
Un articol (data item) este un cmp care memoreaz valoarea unui atribut
dintr-o nregistrare (tuplu), dar poate fi o nregistrare ntreag sau chiar o
grupare de inregistrari memorate intr-un bloc
Operaiile de acces la un articol X al bazei de date pot fi:
read(X): citete articolul X din baza de date ntr-o variabil a programului; pentru
simplificarea notaiilor se va considera c variabila n care se citete articolul X
este notat, de asemenea, cu X.
write(X): scrie variabila de program X n articolul X al bazei de date.
Tranzaciile lansate de diferii utilizatori se pot executa concurent i este
posibil s actualizeze aceleai articole ale bazei de date
Dac execuia concurent a tranzaciilor este necontrolat, este posibil ca
baza de date s ajung ntr-o stare inconsistent (incorect), chiar dac:
fiecare tranzacie n parte a fost executat corect
nu au aprut defecte de funcionare ale sistemului
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 4
Anomalii de acces concurent la bazele de date (2)
Actualizare pierduta (lost update): rezulta X=X-M (b) in loc de valoarea
corecta X= X+N-M (a)
Citire improprie (dirty read): T2 citeste X+N, desi X=X+N nu a fost validata (c)
Timp T1 T2 T1 T2 T1 T2
read(X) read(X) read(X)
X=X+N X=X+N X=X+N
write(X) read(X) write(X)
read(X) X=X-M read(X)
X=X-M write(X) X=X-M
write(X) write(X) write(X)
abort
(a) (b) (c)
Citire irepetabil (nonrepetable read): o tranzacie citete un articol de dou
ori, iar ntre cele dou citiri, o alt tranzacie a modificat chiar acel articol
Citire fantom (phantom read): o tranzacie prelucreaz un set de linii
rezultat al unei interogri si n timpul acestei prelucrri o alt tranzacie
insereaza sau sterge o linie
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 5
Proprietatile tranzactiilor (ACID)
Atomicitatea (atomicity): proprietatea unei tranzacii de a reprezenta o
unitate de execuie indivizibil, adic de a executa totul sau nimic
Consistena (consistency): proprietatea unei tranzactii de a efectua
modificri corecte ale bazei de date
o tranzacie transform baza de date dintr-o stare consistent n alt stare
consistent
starea unei baze de date este consistent dac respect toate constrngerile de
integritate implicite sau explicite
Izolarea (isolation): proprietatea unei tranzacii de a face vizibile modificrile
efectuate numai dup ce a fost validat (committed)
Dac rezultatele pariale ale unei tranzacii sunt vizibile altor tranzacii nainte de
validarea acesteia i dac se ntmpl ca aceast tranzacie s fie abandonat i
anulat (rollback), atunci toate tranzaciile care au accesat rezultatele pariale ale
acesteia vor trebui s fie anulate
Aceste operaii de anulare pot produce, la rndul lor alte anulri, .a.m.d.
Durabilitarea (durability): proprietatea prin care, dup validarea unei
tranzacii, modificrile efectuate de aceasta n baza de date nu vor mai fi
pierdute datorit unor defectri ulterioare a sistemului

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 6


Operatiile efectuate de tranzactii
Operaiile efectuate de o tranzacie i nregistrate de administratorul de
refacere (recovery manager):
begin: nceputul execuiei unei tranzacii
read sau write: operaii de citire sau scriere a articolelor din baza de date
end: marcheaz terminarea operaiilor de scriere sau citire din baza de date,
ceea ce nseamn c tranzacia se poate termina; totui, este posibil s fie
necesare unele operaii de verificare nainte de validarea (commit) tranzaciei.
commit: terminarea cu succes a tranzaciei, validarea tuturor modificrilor
efectuate n baza de date i vizibilitatea modificrilor efectuate pentru alte
tranzacii; din acest moment, modificrile efectuate nu mai pot fi anulate, nici
pierdute printr-o defectare ulterioar a sistemului
rollback (sau abort): semnifica faptul c tranzacia a fost abandonat i c orice
efect pe care tranzacia l-a avut asupra bazei de date trebuie s fie anulat (printr-
o rulare napoi a operaiilor).
undo: operaie similar operaiei rollback, dar se aplic unei singure operaii, nu
unei ntregi tranzacii.
redo: specific faptul c unele operaii ale unei tranzacii trebuie s fie executate
din nou pentru a se putea valida ntreaga tranzacie.
Ultimele dou operaii sunt necesare numai n anumite tehnici de refacere
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 7
Starile tranzactiilor
Diagrama de stare a unei tranzactii:
read,
write

begin end PARTIAL commit


ACTIV VALIDAT VALIDAT

abort abort

ABANDONAT TERMINAT

Pentru refacerea bazei de date, sistemul SGBD menine un fiier jurnal (log
file), n care memoreaz operaiile efectuate de fiecare tranzacie,
identificat printr-un identificator unic (T) generat de sistem
Fiierul jurnal este memorat pe disc i nu este afectat de erori de execuie,
cu excepia unei defectri catastrofice a discului
Fiierul jurnal este salvat periodic pe un suport auxiliar (band magnetic)
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 8
Planificarea tranzactiilor
O planificare (schedule, sau istorie - history) S a n tranzacii
T1,T2,..Ti,...Tn este o ordonare a operaiilor tranzaciilor astfel nct:
Pentru orice tranzacie Ti care particip n S, operaiile lui Ti n S
respect ordinea iniial din Ti
Alte operaii (ale altor tranzacii Tj, unde j i) pot fi ntreesute cu
operaii ale tranzaciei Ti
Dou operaii dintr-o planificare sunt conflictuale (conflicting
operations) dac aparin unor tranzacii diferite, acceseaz acelai
articol i cel puin una dintre operaii este operaie de scriere
Planificri seriale (serial schedules): o planificare S se numete
serial dac pentru orice tranzacie T participant n planificare,
toate operaiile din T se execut consecutiv n S; altfel, planificarea
se numete neserial
Pentru n tranzactii pot exista n! planificari seriale
Orice planificare seriala a unor tranzactii corecte este corecta, dar
nu permite ntreeserea operaiilor i concurena tranzaciilor
De aceea, n cazul sistemelor de baze de date cu utilizatori multipli
se folosesc planificrile serializabile, care admit concurena,
asigurnd n aceelai timp consistena bazei de date
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 9
Planificari seriale ale tranzactiilor
Planificarile seriale posibile ale tranzactiilor T1 si T2 sunt SA si SB:
T1 T2 T1 T2
read(X) r1(X) read(X) r2(X)
X=X-N X=X+M
write(X) w1(X) write(X) w2(X)
read(Y) r1(Y) read(X) r1(X)
SA SB
Y=Y+N X=X-N
write(Y) w1(Y) write(X) w1(X)
read(X) r2(X) read(Y) r1(Y)
X=X+M Y=Y+N
write(X) w2(X) write(Y) w1(Y)

Notam operaiile de begin, read, write, commit i abort cu b, r, w, c, a, cu indice


numarul tranzaciei i ca parametru articolul pe care l-a citit sau scris:
SA: b1; r1(X); w1(X); r1(Y); w1(Y); c1; b2; r2(X); w2(X); c2;
SB: b2; r2(X); w2(X); c2; b1; r1(X); w1(X); r1(Y); w1(Y); c1;
Perechile de operaii conflictuale sunt:
in SA: ((r1(X), w2(X)), w1(X), r2(X)), (w1(X), w2(X));
in SB: (r2(X), w1(X)), (w2(X), r1(X)), (w2(X), w1(X))
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 10
Planificari serializabile ale tranzactiilor (1)
O planificare a n tranzacii se numte serializabil dac este
echivalent cu o planificare serial a celor n tranzacii
Dou planificri sunt echivalente (din punct de vedere al conflictelor)
dac operaiile din oricare pereche de operatii conflictuale se execut
n aceeai ordine n cele dou planificri
Planificarile SC si SD sunt planificari echivalente cu SA, deci sunt
serializabile
T1 T2 T1 T2
read(X) r1(X) read(X) r1(X)
X=X-N X=X-N
write(X) w1(X) write(X) w1(X)
read(X) r2(X) SC read(Y) r1(Y) SD
X=X+M read(X) r2(X)
write(X)- w2(X) X=X+M
read(Y) r1(Y) Y=Y+N
Y=Y+N write(Y) w1(Y)
write(Y) w1(Y) write(X) w2(X)

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 11


Planificari serializabile ale tranzactiilor (2)
Planificarile SE si SF nu sunt sunt echivalente nici cu SA nici cu SB,
deci sunt neserializabile
T1 T2 T1 T2
read(X) r1(X) read(X) r1(X)
X=X-N X=X-N
read(X) r2(X) read(X) r2(X)
write(X) w1(X) X=X+M
SE SF
X=X+M write(X) w1(X)
write(X)- w2(X) read(Y) r1(Y)
read(Y) r1(Y) Y=Y+N
Y=Y+N write(Y) w1(Y)
write(Y) w1(Y) write(X) w2(X)

Testarea echivalentei unei planificri cu o planificare seriala prin testarea ordinii


operatiilor din toate perechile de operatii conflictuale este foarte costisitoare
DAR s-a demonstrat ca se poate asigura echivalenta planificarilor (deci
serializabilitatea lor) prin tehnici de control al concurenei tranzaciilor, care
interzic execuia n ordine incorect a operaiilor din perechile conflictuale
De exemplu: n SE se interzice execuia r2(X) naintea de w1(X)

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 12


Tehnici de control al concurentei tranzactiilor
Pentru a asigura proprietile ACID ale tranzaciilor i, prin aceasta, consistena
datelor, este necesar controlul execuiei concurente a tranzaciilor
Cele mai utilizate tehnici de control al concurenei sunt:
Tehnici bazate pe blocarea accesului la date prin zvoare (locks)
Tehnici bazate pe mrci de timp (timestamps)
Protocoalele de control al concurenei sunt implementate de SGBD-uri:
programatorii de aplicaii nu opereaz explicit cu zvoare sau mrci de timp
ei stabilesc opiunile prin care sistemul SGBD executa anumite operatii de control
Un zvor (lock) este o variabil L(X) asociat cu un articol X al bazei de date
care descrie starea acelui articol n raport cu operaiile care i se pot aplica
Tipuri de zavoare utilizate in SGBD-uri:
zvoare binare, zvoare cu stri multiple
Un zvor binar (binary lock) L(X) poate avea dou stri:
L(X) = 1 - liber (sau neblocat - free, unlocked) se poate accesa articolul X
L(X) = 0 - ocupat (sau blocat - busy, locked) nu se poate accesa articolul X
Asupra unui zvor binar L(X) se pot executa dou operaii:
operaia de blocare, lock(X) trece zvorul n starea blocat (ocupat)
operaia de eliberare, unlock(X) trece zvorul n starea neblocat (liber)
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 13
Zavoare binare
Dac zvorul articolului X este liber (L(X)=1), atunci tranzactia:
achiziioneaz zvorul (trecndu-l n starea ocupat prin operatia lock )
execut operaiile necesare asupra articolului X
elibereaz zvorul (trcndu-l in starea liber prin operaia unlock)
Dac zvorul articolului X este ocupat (L(X)=0), atunci tranzacia:
ateapt pn ce acesta este eliberat (de o alt tranzacie, care i-a terminat
operaiile de acces la acel articol),
dup care execut aceeai secven de operaii: blocarea zvorului, execuia
operaiilor care acceseaz articolul respectiv i eliberarea zvorului
Operaia de blocare se executat ca operaie indivizibil (folosind
instruciuni speciale ale procesoarelor de tip TestAndSet)
Regulile respectate de fiecare tranzacie care folosete un zvor binar:
1. O tranzacie trebuie s blocheze zvorul articolului X (prin operatia lock(X)),
nainte de a efectua orice operaie de citire sau de scriere a articolului X
2. O tranzacie trebuie s elibereze zvorul unui articol X (prin operaia unlock(X))
dup ce a efectuat toate operaiile de citire sau de scriere a articolului X
3. O tranzacie nu poate achizitiona un zvor pe care l deine deja
4. O tranzacie nu poate elibera un zvor pe care nu l deine

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 14


Zvoare cu stri multiple (1)
Tehnica zvoarelor binare este prea restrictiv i limiteaz n mod nejustificat
concurena n execuia tranzaciilor
De exemplu, mai multe tranzacii pot efectua operaii de citire n mod
concurent asupra aceluiai articol, fr ca acest lucru s afecteze consistena
bazei de date, dar acest lucru este interzis n tehnica zvoarelor binare
De aceea, multe sisteme de gestiune a bazelor de date utilizeaz zvoare cu
stri multiple
Un zvor cu stri multiple (multiple-mode lock) M(X) poate fi ntr-una din
urmtoarele trei stri:
liber (neblocat, unlocked): zvorul nu este deinut de nici o tranzacie i prima
tranzacie care lanseaz o operaie de blocare l poate obine
blocat pentru citire (sau blocat partajat,read-locked): oricte tranzacii pot deine
zvorul respectiv i pot efectua operaii de citire a articolului X, dar nici o tranzacie
nu poate scrie n acest articol
blocat pentru scriere (sau blocat exclusiv, write-locked): o singur tranzacie
poate deine zvorul i poate citi sau scrie n articolul X, nici o alt tranzacie
neputnd accesa articolul respectiv, nici pentru scriere nici pentru citire
Operatiile cu zvoarele cu stri multiple:
read_lock(X) - blocarea pentru citire (partajat) a zvorului M(X)
write_lock(X) - blocarea pentru scriere (exclusiv) a zvorului M(X)
unlock(X) - deblocarea zvorului M(X)
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 15
Zvoare cu stri multiple (2)
Orice tranzacie care utilizeaz un zvor cu stri multiple M(X)
trebuie s respecte urmtoarele reguli:
1. O tranzacie trebuie s execute o operaie de blocare partajat sau
exclusiv a zvorului articolului X (read_lock(X) sau write_lock(X))
nainte de a efectua orice operaie de citire a articolului X
2. O tranzacie trebuie s execute o operaie de blocare exclusiv a
zvorului articolului X (write_lock(X)) nainte de a efectua orice operaie
de scriere a lui X
3. O tranzacie trebuie s elibereze zvorul unui articol X (unlock(X)) dup
ce a efectuat toate operaiile de citire sau de scriere a articolului X
Operaia de eliberare a unui zvor poate fi executata numai de o
tranzactie care deine (n mod exclusiv sau partajat) acel zavor

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 16


Blocarea folosind zvoare binare
Fie tranzactiile T3,T4, o planificarea serial (a) si planificarile neseriale (b) si (c)
Daca se foloseste un singur zavor binar pentru toate articolele grupate (XY) si se
respecta protocolul de utilizare a zavoarelor, se obtin planificari serializabile (b)
Daca se folosesc mai multe zavoare, se pot obtine planificari neserializabile (c), chiar
daca se respecta protocolul de utiliz. a zavoarelor T3 T4
T3 T4 T3 T4 lock(Y)
read(Y) lock(XY) read(Y)
read(X) read(Y) unlock(Y)
X=X+Y read(X) lock(X)
write(X) lock(XY) read(X)
(a) (b) (c)
read(X) X=X+Y T4 blocata unlock(X)
read(Y) write(X) lock(Y)
Y=X+Y unlock(XY) read(Y)
write(Y) read(X) Y=X+Y
read(Y) write(Y)
Y=X+Y unlock(Y)
write(Y) lock(X)
unlock(XY) read(X)
Fie: X=20, Y=30:
X=X+Y
planificarile (a) si (b): rezultat corect (X=50, Y=80)
planificarea neseriala(c): rezultat eronat (X=50,Y=50) write(X)
unlock(X)
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 17
Protocolul de blocare in doua faze (1)
Pentru a asigura serializabilitatea planificrilor tranzactiilor care folosesc mai
multe zavoare, pe lng regulile de utilizare a zvoarelor, mai este necesar
s se respecte un protocol privind ordinea operatiilor de blocare i de
eliberare a zvoarelor, cum este protocolul de blocare in doua faze
Protocolul de blocare n dou faze (two-phase locking) impune ca fiecare
tranzactie sa respecte protocolul de utilizare a zavoarelor si toate operaiile de
blocare a zvoarelor sa preceada prima operaie de eliberare a unui zvor
O astfel de tranzacie poate fi divizat n dou faze:
faza de cretere (growing phase), n care pot fi achiziionate noi zvoare ale
articolelor care vor fi accesate, dar nici un zvor nu poate fi eliberat
faza de descretere (shrinking phase), n care zvoarele deinute pot fi eliberate,
dar nici un alt zvor nu mai poate fi achiziionat.
S-a demonstrat c, dac fiecare tranzacie a unei planificri respect
protocolul de blocare n dou faze, atunci planificarea este serializabil
Planificarea tranzaciilor din figura precedenta (c) nu respect protocolul de
blocare n dou faze deoarece:
T3 elibereaz zvorul articolului Y (unlock(Y) ) naintea achiziionrii zvorului
pentru scrierea articolului X (lock(X))
T4 elibereaz zvorul articolului X (unlock(X) ) naintea achiziionrii zvorului
pentru scrierea articolului Y (lock(Y))
Aceasta planificare este neserializabil, cu rezultat al execuiei incorect, aa
cum s-a artat mai nainte
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 18
Protocolul de blocare in doua faze (2)
Planificarea din figura alaturata este T3 T4
serializabil, echivalent cu planificarea serial
T3, T4 (cu rezultat corect X=50, Y=80) lock(Y)

read(Y)
Daca T3 lanseaz operaia de blocare a
zvorului articolului X naintea tranzaciei T4, lock(X)
tranzacia T4 este blocata, asteptnd lock(X)
eliberarea zvorului articolului X, dup care
unlock(Y) T4 blocata
efectueaza restul operaiilor
read(X)
Probleme care apar la utilizarea zvoarelor:
X=X+Y
impasul (deadlock): blocarea execuiei
tranzaciilor atunci cnd dou sau mai multe write(X)
tranzacii se ateapt una pe ceallalt ca s
unlock(X)
elibereze un zvor; exista tehnici de prevenire si
de eliminare a impasului read(X)
amnarea permanent (nfometare) - lock(Y)
(livelock, indefinit postponement, starvation): o
tranzacie se afl n stare de amnare nedefinit unlock(X)
dac ea nu poate continua execuia o perioad Y=X+Y
lung de timp, n timp ce toate celelalte
tranzacii se execut normal; prevenirea se face write(Y)
prin asigurarea unei politici echilibrate de unlock(Y)
obtinere (blocare) a zavoarelor

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 19


Controlul concurentei bazat pe marci de timp
O marc de timp (timestamp) este un identificator unic al unei tranzacii,
creat de sistemul de gestiune a bazei de date, care se bazeaz pe timpul de
start al tranzaciei
O marc de timp se poate crea:
fie folosind valoarea curent a ceasului sistemului de operare
fie folosind un numrtor care este incrementat la fiecare asignare a unei noi
mrci, n ordinea de lansare a tranzaciilor
O tranzacie T va avea o marc de timp unic, notat TS(T)
Pentru fiecare articol X al bazei de date se definesc dou mrci de timp:
R_TS(X) - marca de timp de citire a articolului X; este cea mai mare marc de
timp dintre toate mrcile de timp ale tranzaciilor care au citit articolul X
W_TS(X) - marca de timp de scriere a articolului X; este cea mai mare marc de
timp dintre toate mrcile de timp ale tranzaciilor care au scris n articolul X
Serializabilitatea planificrilor se obine dac se impun anumite condiii
ordinii de accesare a articolelor de mai multe tranzacii concurente, n funcie
de mrcile de timp ale acestora

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 20


Ordonarea operatiilor dup mrcile de timp
La lansarea unei operaii de citire a articolului X (read(X)):
Dac TS(T) < W_TS(X), atunci tranzacia T trebuie s fie abandonat i rulat
napoi, deoarece o alt tranzacie cu o marc de timp mai mare a scris deja n
articolul X, nainte ca T s fi avut ansa s citeasc articolul X
Dac TS(T) >= W_TS(X), atunci T va executa operaia de citire din articolul X i
va seta marca R_TS(X) la cea mai mare dintre valorile TS(T) i R_TS(X)
La lansarea unei operaii de scriere a articolului X (write(X)):
Dac TS(T) < R_TS(X) , atunci tranzacia T trebuie s fie abandonat i rulat
napoi, deoarece o alt tranzacie cu o marc de timp mai mare (deci lansat
dup T) a citit deja valoarea lui X, nainte ca T s fi avut ansa s scrie n X
Dac TS(T) < W_TS(X), atunci tranzacia T nu va executa operaia de scriere, dar
va putea continua cu celelalte operaii. Aceasta, deoarece o alt tranzacie, cu o
marc de timp mai mare a scris deja o valoare n articolul X, care este mai
recent, iar valoarea pe care ar dori s o nscrie T este deja perimat
Dac nu a aprut nici una din situaiile precedente, atunci T va executa operaia
de scriere n articolul X i va seta W_TS(X) = TS(T)
Ulterior, o tranzacie T care a fost anulat i rulat napoi va fi relansat, dar
cu o nou marc de timp, corespunztoare noului moment de lansare
Ordonarea dup mrcile de timp garanteaz serializabilitatea planificrilor
In acest protocol nu poate sa apara impasul, dar poate apare amnarea
indefinit
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 21
Controlul tranzactiilor
Tehnicile de gestiune a tranzaciilor i de refacere a datelor sunt incluse n
SGBD-uri, iar aplicaiile de baze de date au un control limitat asupra
tranzaciilor prin intermediul unor comenzi SQL
Comenzi SQL pentru tranzacii:
SET TRANSACTION: setare optiuni :
Nivelul de izolare a tranzaciilor (ISOLATION LEVEL)
Modul de refacere a datelor (SET CONSTRAINTS)
Modul de acces la articole - cu valorile posibile READ ONLY, READ WRITE
COMMIT [WORK] terminarea tranzactiei
ROLLBACK [WORK] abandonarea si rularea inapoi a tranzactiei

Nivel de izolare Citire Citire Citire


Pentru orice nivel de izolare impropie nerepetabila fantoma
(ISOLATION LEVEL)
READ DA DA DA
este interzisa pierderea UNCOMMITTED
actualizarilor, dar se admit
READ NU DA DA
unele citiri incorecte, asa COMMITTED
cum se vede in tabel REPEATABLE NU NU DA
READ
SERIALIZABLE NU NU NU

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 22


Exemplu de tranzactie in MySQL (1)
In mod MySQL o tranzactie se lanseaza cu comanda START TRANSACTION
Fie baza de date ZBORURI cu tabelele descrise la inceputul capitolului:

Se defineste o tranzactie pentru rezervarea unui loc la o cursa aeriana in


procedura stocata sp_rezervari()
Daca tabelul CURSE contine linia (1, Bucuresti, Paris, 2008-12-30,1) si se
apeleaza: sp_rezervari(@rez, 100, Ionescu, Ion, Craiova, Bucuresti,
Paris, 2009-12-30, 500) atunci:
Se obtine @rez=1 (executie corecta)
NrLocuriLibere in tabelul CURSE este decrementat cu 1 (mai sunt 0 locuri)
Tabelul PASAGERI va contine si linia (100, Ionescu, Ion, Craiova)
Tabelul FACTURI va contine si linia: (1, 100,1,2008-12-28,500)
Daca se incearca inca o rezervare, se obtine @rez=0 si nicio modificare in
tabele (s-a executat rollback)
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 23
Exemplu de tranzactie in MySQL (2)
DELIMITER $$ DROP PROCEDURE IF EXISTS `zboruri`.`sp_rezervari` $$
CREATE PROCEDURE `zboruri`.`sp_rezervari`(OUT rezultat INT, s_pasager INT,
s_nume varchar(20), s_prenume varchar(20), s_adresa varchar(20), plecare
varchar(20), sosire varchar(20), s_data date, s_pret decimal)
BEGIN DECLARE l_cursa, l_locuri INT;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET autocommit = 0;
START TRANSACTION;
INSERT INTO PASAGERI values(s_pasager, s_nume, s_prenume, s_adresa);
SELECT IdCursa, NrLocuriLibere INTO l_cursa, l_locuri FROM CURSE
WHERE AeroportPlecare=plecare AND AeroportSosire=sosire
AND DataCursa = s_data;
IF l_locuri > 0 THEN BEGIN
UPDATE CURSE SET NrLocuriLibere = l_locuri - 1;
INSERT INTO FACTURI(IdPasager,IdCursa, DataFactura,Pret)
values (s_pasager, l_cursa, CURDATE(), s_pret);
COMMIT;
SET rezultat = 1; END;
ELSE BEGIN ROLLBACK; SET rezultat = 0; END; END IF;
END $$
DELIMITER ;
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 24
Proiectarea tranzactiilor
Tranzaciile sunt corecte dac las baza de date ntr-o stare consistent
Tranzaciile sunt cu att mai eficiente cu ct sunt mai scurte (ca timp de
execuie i ca numr de articole ale bazei de date accesate) deoarece astfel:
se limiteaza frecvena de apariie a impasului (n cazul folosirii zvoarelor)
creste eficienei operaiilor de anulare i de blocare a resurselor
Ori de cte ori se poate nlocui o tranzacie complex, cu numr mare de
operaii i timp de execuie ridicat, cu mai multe tranzacii scurte, este indicat
s se fac aceast transformare
De asemenea, pentru meninerea tranzaciilor ct mai scurte posibil, se
recomand ca o tranzacie s nu fie pornit pn ce nu au fost pregtite toate
datele (citirea datelor de intrare, parcurgerea, analiza i prelucrarea acestora)
Toate operaiile de gestiune a tranzaciilor i de refacere a datelor sunt
prevzute n diferitele componente ale sistemelor SGBD (administratorul de
tranzacii, administratorul de refacere), iar aplicaiile:
trebuie s se prevad tranzacii corecte
pot selecta diferite opiuni de control al tranzaciilor i de refacere a datelor oferite
de sistemul de gestiune respectiv

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 25


Tehnici de refacere a bazelor de date
Refacerea unei baze de date dup producerea unui defect (database
recovery) nseamn aducerea bazei de date ntr-o stare precedent corect,
din care, eventual, se poate reconstrui o nou stare corect i ct mai
apropiat de momentul apariiei defectului
Tehnicile de refacere a bazelor de date sunt, n general, integrate cu tehnicile
de control al concurenei si depind de SGBD
Pentru operaiile de refacere se folosete fiierul jurnal (log file), i (sau) o
copie de rezerv a bazei de date (database backup) stocat n general pe
band magnetic
Un punct de validare (commit point) este punctul atins de o tranzacie care
a executat cu succes toate operaiile sale i le-a nregistrat n fiierul jurnal
ntr-un astfel de punct, o tranzacie T nscrie n fiierul jurnal operaia [commit,T]
i, de asemenea, trebuie s scrie blocul din bufferul de scriere n fiierul jurnal
Un punct de control (checkpoint) este nscris n fiierul jurnal atunci cnd se
scriu n fiierele bazei de date toate rezultatele operaiilor de scriere ale
tranzaciilor validate
Aceasta nseamn c toate tranzaciile care au nregistrarea [commit,T] nscris n
fiierul jurnal naintea unui punct de control nu vor necesita reluarea operaiilor de
scriere n cazul unei defectri a sistemului
Administratorul de refacere al SGBD-ului (recovery manager) decide la ce
interval de timp (sau dup cte tranzacii) introduce un nou punct de control
Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 26
Refacerea datelor dupa defecte necatastrofice
Dac baza de date nu este distrus fizic, dar a devenit inconsistent datorit
unui defect necatastrofic, atunci strategia de refacere const n:
anularea modificrilor care au produs inconsistena (prin operaii undo)
executarea din nou a modificrilor care s-au pierdut (prin operaii redo)
n acest caz nu este necesar copia de rezerv, ci se folosete starea actual
a bazei de date i fiierul jurnal
Exista dou tehnici de refacere a datelor dupa defecte necatastrofice:
Refacerea cu actualizare amnat (deferred update)
Refacerea cu actualizare imediat (immediate update)
Pentru refacerea cu actualizare amanata se executa urmatoarele operatii:
Se parcurge fiierul jurnal n sens invers, ncepnd de la ultima nregistrare, pn
se ntlnete primul punct de control
Se construieste o list a tranzaciilor validate, n care se introduc toate tranzaciile
T care au o nregistrare de tipul [commit,T] n fiierul jurnal ntre punctul de control
considerat i sfritul fiierului jurnal,
Se construieste o list a tranzaciilor nevalidate, n care se introduc toate
tranzaciile T care au o nregistrare de start ([begin,T]) n fiierul jurnal, dar nu au
i nregistrarea corespunztoare de validare.
Dup aceasta, se execut reluarea (REDO) tuturor operaiilor de scriere (write(X))
ale tranzaciilor validate, n ordinea n care apar n fiierul jurnal, iar tranzaciile
nevalidate sunt relansate

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 27


Refacerea cu actualizare imediata
In tehnicile de refacere cu actualizare imediat, atunci cnd o tranzacie
lanseaz o comand de actualizare a bazei de date, actualizarea este
efectuat imediat, fr s se mai atepte ajungerea la un punct de validare
In majoritatea acestor tehnici se impune ca modificarea s fie mai nti
memorat n fiierul jurnal (pe disc), nainte de a fi aplicat bazei de date;
aceast regul este cunoscut sub numele de protocol de scriere n avans
a fiierului jurnal (write-ahead log protocol)
Dac se admite actualizarea imediat, atunci la refacere trebuie s se poat
anula (prin operaii undo) modificrile efectuate de o tranzacie, dac
aceasta eueaz ulterior din diferite motive
In felul acesta se efectueaza rularea napoi (rollback) a tranzaciei
Tehnica de refacere cu actualizare imediat are avantajul simplitii
operaiilor de scriere, care se efectueaz direct n baza de date, fr s fie
necesar s se atepte atingerea unui punct de validare pentru transferarea
datelor n baza de date
Dezavantajul acestei metode este faptul c pot apare anulri n cascad,
care necesit operaii complicate de refacere

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 28


Refacerea datelor dupa defecte catastrofice
Dac baza de date a fost puternic distrus datorit unei defectri serioase a
discului, atunci se restaureaz starea bazei de date din copia de rezerv a
bazei de date (database backup)
Ultima copie salvat se ncarc de pe band pe disc (dup ce acesta a fost
nlocuit sau reparat) i sistemul este repornit
Totui, tranzaciile efectuate de la ultima operaie de salvare pn n
momentul apariiei defectului se pierd
Deoarece fiierul jurnal este mult mai mic dect fiierele bazei de date, se
obinuiete ca acesta s fie salvat mai des dect baza de date nsi i s
fie iniializat la fiecare operaie de salvare a bazei de date
In aceast situaie, dup ncrcarea ultimei copii salvate a bazei de date se
folosete fiierul jurnal pentru a reface toate tranzaciile validate existente n
copia salvat a fiierului jurnal (care este mai recent dect copia salvat a
bazei de date)

Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 29


Prof. Felicia Ionescu Cap. 5 - Gestiunea tranzactiilor 30