Sunteți pe pagina 1din 19

CAPITOLUL VIII

TRANZACII
Definiii
Conceptele de; tranzacie, consisten i concuren sunt definite
pentru un sistem de baze de date distribuite. n timpul operaiilor de
actualizare (modificare adugare i tergere) baza de date trece dintr-o stare
n alt stare. Afirmaiile pe care trebuie s le satisfac la anumite momente,
formeaz restriciile de integritate.
O stare a unei baze de date este consistent dac ea satisface la
anumite momente toate restriciile de integritate ale datelor definite asupra
sa.Starea rezultat din orice prelucrare trebuie s fie consistent.
Problemele care se pun sunt:
. Ce se ntmpl dac dou ntrebri ateapt s actualizeze acelai element
de dat sau dac se realizeaz o eroare de sistem pe parcursul execuiei
unei ntrebri de actualizare a aceluiai element, sau dac se realizeaz o
eroare de sistem pe parcursul execuiei unei ntrebri de actualizare a
unui
element. n acest caz, nu putem s restartm execuia unei ntrebri de
actualizare ntrerupt n urma unei erori, deoarece anumite elemente de
date au fost actualizate mai nainte de realizarea acestui eveniment.
. nlturarea efectelor negative a ntrebrilor de actualizare asupra bazei de
date.Din aceste observaii rezult c: Nu exist noiuni de execuie
consistent i n siguran a unei ntrebri. Sigurana se refer la tolerana
fa de erori (pene, defecte etc.) si la capacitatea de recuperare dup
apariia unei erori. Trebuie ca baza de date s rmn ntr-o stare
consistent chiar dac exist un numr mare de cereri de actualizare care o
acceseaz concurent. O alt situaie se refer la cazul cnd baza de date este
replicat i ntr-o stare eventual consistent adic toate copiile elementelor
au aceeai valoare. Conceptul de tranzacie este introdus ca o unitate de
baz a consistenei i a siguranei.
Actualizrile sunt executate ca
tranzacii n timp ce strategiile de execuie sunt determinate de ordinea
operaiilor asupra bazei de date. Este esenial ca atunci cnd se termin
tranzacia asupra bazei de date aceasta s rmna ntr-o stare consistent.
Intuitiv, tranzacia este o succesiune de operaii: de citire, de scriere i de
calcul dintr-o, respectiv ntr-o baz de date ce constituie o unitate de
prelucrare care satisface proprietile A.C.I.D.
Unitatea de prelucrare se execut n totalitate adic tranzacia este
atomic (proprietatea A) i indivizibil (proprietatea I).

Componenta unui SGBD care asigur respectarea acestor proprieti


se numete manager de tranzacii (MT) (transaction manager). MT
asigur aceste proprieti cu ajutorul funciilor: COMMIT i
ROLLBACK.
Prima semnalizeaz ncheierea cu succes a tranzaciei i a doua
semnalizeaz euarea tranzaciei i provoac abandonarea consecinelor
prin refacearea structurii iniiale.
O tranzacie trebuie s transforme o stare consistent a BD ntr-o alt
stare consistent a BD (proprietatea C). Deoarece operaiile care o compun
se execut secvenial n intervalul de timp, de la nceputul pn la sfritul
execuiei tranzaciei este posibil ca BD s nu fie ntr-o stare consistent. De
exemplu tranzacia care transfer 10 milioane din contul A n contul B se
execut n mai multe etape. Mai nti se scade din contul A apoi se adaug
n contul B. ntre cele dou etape, BD este ntr-o stare inconsistent
deoarece suma nu este n nici un cont. Pstrarea consistenei este necesar
chiar cnd tranzacia eueaz, prin operaia rollback, cnd BD este adus la
starea anterioar nceperii tranzaciei. Momentul nceperii unei tranzaciei
poate fi exprimat explicit sau coincide cu momentul terminrii tranzaciei
anterioare. Astfel se poate ntmpla ca mai multe tranzacii acioneaz
asupra acelorai BDD.
Din proprietatea de consisten (C) a strii BD rezult c tranzacia
trebuie s opereze numai asupra unei stri consistente a BD. De aceea
execuiile tranzaciilor trebuie s fie separabile (izolate). Actualizrile
trebuie s fie persistente (durabile, proprietatea D). n mod practic acest
mecanism este implementat prin formalizarea operaiilor i tranzaciilor ce
acioneaz asupra BD.
Condiii de terminare a tranzaciilor
Deoarece mulimea de operaii care compune tranzacia este finit i
ordonat, execuia lor se termin n succes ntr-un interval finit i aceasta
este marcat de operaia COMMIT sau dac tranzacia se termin din
cauza unei erori, atunci tranzacia nu reuete s execute toate operaiile
prevzute s termin prin ROLLBACK (Abort). n cazul abortrii execuia
este oprit, iar efectele tuturor operaiilor pe care le-a executat pn n acel
moment sunt anulate, astfel nct BD revine la starea dinaintea tranzaciei.
Comanda de validare a tranzaciei marcheaz momentul ncepnd de
la care efectele tranzaciei nu mai pot fi anulate, adic modificrile fcute
sunt permanente i indic SGBD-ului momentul de la care efectele
tranzaciei devin vizibile altor tranzacii i reflect starea BD. Este posibil
ca unele tranzacii executate n mod concurent cu tranzacia T s fi accesat
aceste date nainte de abortarea lui T. Aceste tranzacii vor fi abortate
deoarece au avut acces la date inconsistente din BD ceea ce nseamn c
2

rezultatele pot fi eronate. Acest efect se poate propaga n continuare i


asupra altor tranzacii conducnd la abortarea n cascad a tranzaciilor
(efectul domino). Dac se folosete un mecanism de validare care respect
urmtoarele dou reguli atunci apariia fenomenului de abortare n cascad
devine imposibil:
- nici o tranzacie nu va putea accesa datele modificate de o tranzacie
T dect dup validarea acesteia;
- pe de alt parte, o data ce tranzacia e valid aceasta nu mai poate fi
abortat i astfel nu mai poate fi declanat abortarea n cascad.
Operaia COMMIT marcheaz terminarea tranzaciei din punct de
vedere logic. Validarea se face numai dup ce toate operaiile ce formeaz
tranzacia au fost executate. Pn n momentul validrii (COMMIT)
actualizrile efectuate de tranzacie sunt invizibile altor tranzacii i pot fi
oricnd revocate i odat cu execuia operatiei ROLLBACK.
Proprietile tranzaciei
Prin definiie, tranzaciile sunt uniti logice de prelucrare care
garanteaz consistena i sigurana bazei de date. Am vzut c o tranzacie
trebuie s satisfac proprietile A.C.I.D. Atomicitate, Consisten, Izolare
i Durabilitate) pe care le detaliem mai jos.
Atomicitatea. Aceast proprietate nseamn c tranzacia este considerat o
unitate logic de prelucrare elementar a crei execuie se face dup regula
totul sau nimic adic ori se execut toate operaiile din tranzacie ori cele
care s-au executat parial nu sunt considerate. Dac tranzacia este
ntrerupt datorit unor cauze oarecare, atunci SGBD-ul are sarcina ntr-un
fel sau altul de a termina tranzacia. Dup eliminarea cauzei care a dus la
ntreruperea tranzaciei, n funcie de stadiul de execuie n care s-a aflat n
momentul ntreruperii SGBD poate proceda n dou moduri:
- fie completeaz operaiile rmase neexecutate din cadrul tranzaciei
terminnd tranzacia cu succes
- fie anuleaz toate efectele operaiilor executate de tranzacie pn la
momentul ntreruperii, terminnd tranzacia prin abort.
Consistena. Orice tranzacie executat independent trebuie s pstreze
consistena bazei de date. Am vzut c aceast succesiune de operaii
constituie un program care trebuie s transforme baza de date dintr-o stare
consistent ntr-o alt stare consistent. Adic s conserve restriciile de
integritate din care amintim:
- dependenele,
- unicitatea cheilor primare,
- integritatea referenial,
3

- orice predicat care definete o restricie de integritate a bazei de date.


Verificarea acestei proprieti rmne n seama programatorului.
Izolarea. Este proprietatea tranzaciei de a avea acces doar la strile
consistente ale bazei de date. Aceasta nseamn c modificrile efectuate de
ctre o tranzacie sunt inaccesibile altor tranzacii concurente pn n
momentul validrii acesteia. Utilizatorul care a lansat o tranzacie nu va
percepe n nici un fel faptul c alte tranzacii sunt executate n acela
sistem. Izolarea tranzaciei este asigurat de algoritmii de control pentru
concuren.
Conceptul de izolare este caracterizat prin cel de seriabilitate dar nu se
confund. Seriabilitatea este o condiie suficient de realizare a izolrii dar
nu i necesar. Proprietatea de izolare elimin abortarea n cascad a
tranzaciilor. ntr-adevr dac rezultatele incomplete ale unei tranzacii ar fi
vizibile altor tranzacii, nainte de execuia operaiei COMMIT i dac se
ntmpl ca aceast operaie s aborteze atunci toate tranzaciile care au
accesat operaiile incomplete ar trebui s aborteze.
Durabilitatea. Durabilitatea este o proprietate a tranzaciei care garanteaz
c, dac tranzacia se termin prin operaia COMMIT atunci rezultatele ei
devin permanente i sunt scrise n baza de date. Chiar dac dup momentul
validrii apare un incident care mpiedic nscrierea normal a rezultatelor
tranzaciei n baza de date, acestea vor fi inregistrate dup reluarea
activitii. Mecanismul prin care se realizeaz proprietaea D (durabilitate)
are la baz conceptul de jurnal. Jurnalul este un fiier secvenial n care
sunt nregistrate din sistem i conine istoria evoluiei ntregului sistem.
Este folosit la reluarea activitii a procedurilor de recuperare care vor
completa eventualele operaiuni neterminate ale tranzaciilor care au fost
nevalidate nainte de apariia erorii.
Exemplul 1. Fie sistemul de rezervare de locuri pentru liniile aeriene
a crui baz de date este compus din relaiile :
- cursa(NR, DECOLARE, ATERIZARE, LOCALITATE, DATA, CAPACITATE)
- client (CNP, NUME, PRENUME, ADRESA)
- rezervare (NR, CNP, OBSERVATII)
Atributele care compun schemele relaiilor au semnificaiile urmtoare:
NR - reprezint numrul cursei,
DECOLARE, ATERIZARE - reprezint aeroporturile de decolare i aterizare.
CNP - codul numeric personal al clientului,
NUME, PRENUME - reprezint numele i prenumele clientului,
OBSERVATII - sunt informaii referitoare la rezervare.

Pentru a face o rezervare se introduce codul zborului solicitat NRC i


codul numeric personal CNPC al clientului i eventuale observaii de cel
care dorete rezervarea.
TRANSACTION rezervare

Begin
INPUT { NRC, CNPC, OBS }
EXEC SQL

UPDATE cursa
SET CAP=CAP-1
WHERE NR=NRC
EXEC SQL
INSERT INTO rezervare (NR, CNP, OBS)
VALUES (NRC, CNPC, NULL)
OUTPUT (Rezervare efectuat)

End.
Exemplul 2. Rentorcndu-ne la exemplul 1 s-ar putea ca s nu fie
locuri la cursa i data cerut.
TRANSACTION rezervare
Begin
INPUT (NRC, DATAC, NUME_CLIENT)
EXEC SQL
SELECT LOC_LIB, CAPAC INTO Z1, Z2
FROM cursa
WHERE NR=NRC AND DATA=DATAC;
IF Z1=Z2

Then
OUTPUT ( nu exist locuri libere)
ROLLBACK

End
Else
EXEC SQL
UPDATE curs
SET LOC_LIB=LOC_LIB -1
WHERE NRC=NR AND DATA=DATAC;
EXEC SQL
INSERT INTO rezervare (NRC, DATAC, NUME_CL)
VALUES (NRC, DATAC, NUME_CL, NULL)
OUTPUT (Rezervare)
END
COMMIT.

Formalizarea conceptului de tranzacie


Tranzacia este o mulime finit i ordonat de operaii de citire i
scriere la care se adaug operaii de calcul i de terminare ce constituie o
unitate de prelucrare care satisface proprietile A.C.I.D.
Pentru a judeca corectitudinea algoritmilor de gestiune este necesar s
definim n mod formal conceptele de tranzacie. Vom formaliza conceptele
care exprim numai tranzacii ce exprim ntrebri de modificare.
Prin urmare tranzacia corespunde unei ntrebri de actualizare ce
realizeaz accesul la un element de dat pentru modificarea lui. Am vzut
c, tranzacia este o unitate de prelucrare care se execut n ntregime sau
deloc, (adic satisfac proprietate de atomicitate A).
Elementele necesare pentru a modelarea unei tranzactii sunt:
E - o mulime de operaii de citire i de scriere,
F - {COMMIT, ROLLBACK} a operaiilor de terminare,
G - o mulime de operaii de calcul,
AEFG i o relaie de preordine pe A.
Cuplul T se numete tranzacie. Relaia de preordine pe
mulimea operaiilor A indic ordinea de execuie a operaiilor
componente i va fi citit prin precede n execuie .
n continuare, notm cu S starea bazei de date i C o mulime de
restricii pe care trebuie s le satisfac strile bazei de date. Tranzacia este
dat de T a1 , a 2 ,..., a m unde ai reprezint o operaie (aciune, task).
Tranzacia trebuie s satisfac proprietatea de consisten (proprietatea C )
adic s transforme starea S care satisface restriciile C ntr-o alt stare T(S)
care satisface de asemenea C.
Formal SCT(S) C
La terminarea tranzaciei operaiile care au fost executate nu mai pot fi
aduse la starea iniial aceasta nseamn c tranzacia este durabil,
(satisface proprietatea D).
Operaiile dintr-o tranzacie se execut autonom fa de operaiile din
alte tranzacii (proprietatea i).
Tranzacia este o prelucrare care apeleaz cel puin o dat o operaie
de scriere a unei date care a fost modificat adic conine n mod
obligatoriu o operaie de scriere.
Aadar o tranzacie Ti se definete formal ca relaie de ordine parial
Ti ( Ai , i ), unde:

1. Ai Ei Fi Gi
2. () ai,j, ai,k Ei i exist un element de dat x la care acestea se
aplic fie ca:
a ij R (x ) i a ik W (x ) fie
a ij W (x ) i a ik R (x) fie
a ij W (x ) i a ik W (x )
atunci fie aij i aik fie aik i aij
3. aij Ei avem aij i aik Fi
Prima condiie definete domiciliul A al relaiei de preordine .
A doua condiie arat c ntre orice dou operaii conflictuale exist o
ordine de preceden n execuie. Dou operaii sunt conflictuale dac
ambele acceseaz aceiai dat i cel puin una din ele este de tip scriere.
Ordinea de preceden n execuie a operaiilor determin tranzacia.
Condiia 3 arat c toate operaiile tranzaciei trebuie s precead condiia
de terminare.
Exemplul 1. Fie tranzacia T dat de secvena.
READ( a )
READ(b)
bba
WRITE (b)
READ(c )
cca
WRITE (c )
COMMIT

A={R(a), R(b), W(b), R(c),W(c),C} unde preordinea


= {(R(a), R(b)), (R(a), W(b)), (R(b),W(b)), ((R(a),R(c)),
(R(b),R(c)), (R(c),W(c)), (R(a),W(c)), (R(b),W(c)) ((R(a),C), (R(b),C),
(R(c),C), (W(b),C), (W(c),C) ordinea execuiei adic T={R(a), R(b), W(b),
R(c), W(c), C}.
Tipuri de tranzacii
Tranzaciile pot fi mprite n clase diferite. Clasificarea tranzaciilor
se face dup: domeniile de aplicaii, durat i structur.
Astfel tranzacia care actualizeaz date care sunt situate ntr-un singur
loc se numete tranzacie regulat.
Tranzacia care actualizeaz date distribuite se numete tranzacie
distribuit. Dac operaiile se aplic asupra bazelor de date eterogene
atunci tranzaciile se numesc eterogene. O dimensiune important pentru
clasificarea tranzaciilor este durata.
Tinnd cont de aceast dimensiune distingem tranzacii on-line i
tranzacii batch, care mai sunt cunoscute tranzacii short-life i tranzacii
long-life.

Tranzaciile on-line sunt caracterizate printr-un timp de rspuns scurt


(de ordinul ctorva secunde) i prin acces la o poriune mic a bazei de
date. Aceast clas cuprinde din aplicaiile curente cele mai.
Tranzaciile batch au un timp de execuie lung (minute, ore sau zile) i
acceseaz o poriune mare a bazei de date.
Aplicaiile tipice ce necesit tranzacii batch (grup) sunt: aplicaiile
statistice, generrile de rapoarte, ntrebri complexe. BD-CAD/CAM i
procesrile de imagini.
Din punct de vedere al structurii unei tranzacii exist dou moduri de
a privi structura unei tranzacii:
1. cnd tranzacia se compune dintr-o mulime ordonat de operaii de
citire, scriere de calcul i de oprire.
2. cnd tranzacia poate fi divizat n subtranzacii.
Dac se consider tranzaciile din prima categorie atunci acestea au un
punct de nceput un corp i un punct terminal abort sau commit.
Begin_transaction actualizare_buget
Begin
EXEC.SQL
UPDATE J SET Buget=Buget*1.1
WHERE JNAME=ELECTRO

End.
Aceasta este numit tranzacie simpl (plat).
O alt alternativ este ca o tranzacie s includ alte tranzacii cu
puncte proprii de nceput i commit.
Aceste tranzacii sunt numite tranzacii nested.
Begin tranzaction rezervare
Begin
Begin tranzaction cursa
...
End cursa
Begin Hotel
...
End hotel
Begin maina
...
End maina
End
Multe din agenii fac rezervri pe lng bilete i de camere la hotel i de
maini.

Software de prelucrare a tranzaciilor


Softwarele de procesare a tranzaciilor este precedent utilizat ntr-o
ntreprindere la creterea disponibilitii, la realizarea unei organizri a
datelor i la protecia lor la accese neautorizate.
Funciile de prelucrare a tranzaciilor pot fi manipulate de softwarul
BD nsui, de unele sisteme de operare sau de ambele. Doi factori complic
integritatea datelor ntr-un mediu de calcul:
- accesul concurent - datele memorate ntr-o BD pot fi accesate
concurent de o mulime de utilizatori care trebuie s actualizeze
datele;
- distribuia datelor - datele memorate ntr-o BD nu pot fi
localizate toate pe un singur site. Cu un software distribuit datele
pot fi memorate pe baza unui numr de scheme de calcul
distribuit interconectate printr-o reea.
Soluiile acestor probleme poteniale sunt numite tranzacii.
Tranzaciia este o secven de modificri ce trebuie s fie svrite complet
sau de loc.
Unele produse software BD implementeaz faciliti de integritate. Dac un
pachet BD este utilizat pe un singur PC i de un singur utilizator nu
necesit faciliti speciale de integritate. Utilizatorul este responsabil de
integritatea datelor de aceea are acces limitat.
Funcii de procesare a tranzaciilor
Funciile de procesare a tranzaciilor permit proiectanilor de aplicaii
s lege mpreun dou sau mai multe operaii asupra datelor astfel ca s fie
executate ca o singur unitate de lucru. Unitatea de lucru trebuie s fie
executat n ntregime sau s nu fie executat de loc. Dezvoltatorul
construiete tranzacia printr-o grupare ntr-o anumit ordine a mai multor
operaii care formeaz o unitate de lucru.
Procesarea tranzaciilor se bazeaz pe conceptele de resurs
partajat i de sincronizare a actualizrii pentru acele resurse partajate.
Astfel, noiunea de resurs partajat poate fi aplicat la orice tip de
obiect dintr-un mediu de calcul, n acest paragraf vom presupune c prin
resurse partajate se nelege orice fiier de date implementat n BD.
Cnd sunt utilizate funciile de gestiune a tranzaciei un program de
aplicaie specific la ce intervale are loc execuia i durata ei, ce schimbri
s-au fcut, la ce puncte pot fi considerate permanente (comise) sau ce
schimbri ar trebui s fie refcute.

Punctele specificate din execuia unei aplicaii n care schimbrile


sunt fie permanente (commit) sau de revenire (rollback) sunt numite puncte
de sincronizare.
n momentul cnd ntr-o aplicaie se declar un punct de sincronizare,
trebuie tiut c, diferite poriuni ale BD afectate de schimbrile determinate
de aplicaie fcute pn n acel moment (punct) sunt ntr-o sincronizare cu
alt punct. ntr-un mediu distribuit BD poate fi rspndit pe un numr de
maini diferite.
Prin urmare, dac o eroare se realizeaz pe o main, toate diversele
poriuni ale BD pe toate mainile trebuie s fie restaurate la strile care
existau apriori fa de cel mai recent punct de sincronizare.
Apoi se restarteaz aplicaia din acel punct.
Primul punct de sincronizare al unei aplicaii este stabilit cnd
aplicaia ncepe execuia. Alt punct este de asemenea stabilit cnd aplicaia
s-a terminat. Dac o aplicaie nu creaz alte puncte de sincronizare,
prelucrarea n ntregime a aplicaiei reprezint o singur tranzacie
terminat normal cnd aplicaia a fcut toate schimbrile n toate partiiile
BD sub controlul ei i care pot fi comise.
Aplicaia ncepe execuia de la primul punct de sincronizare stabilit
anterior. Dac o aplicaie se execut ntr-o perioad lung de timp, este de
dorit s se divid programele componente de prelucrare ntr-un numr de
tranzacii separate. Dac aplicaia se termin anormal toate schimbrile ce
au fost fcute n BD de aplicaie trebuie s fie aduse la valorile iniiale
adic s fie ROLLBACK.
Softwareul BD trebuie s conin funcii pe care programul le poate
invoca pentru declararea punctelor de sincronizare la anumite intervale pe
durata prelucrrii. Prelucrarea pe care programul o face ntre dou puncte
arbitrare succesive de sincronizare este considerat o tranzacie separat. n
aceast abordare soft BD trateaz prelucrarea asociat fiecrei tranzacii ca
o unitate de lucru separat.
Instruciuni de gestiune a tranzaciilor n SQL
SQL definete dou instruciuni considerate ca funcii ale limbajului
de control al datelor (DCL) care ne permit s creem puncte de sincronizare.
COMMIT este utilizat pentru a stabili un punct de sincronizare
care indic, c toate schimbrile ce au fost fcute n BD pn la
acel punct sunt permanente.
ROLLBACK cnd este utilizat, arat c, schimbrile ce au fost
fcute n BD de la cel mai recent punct de sincronizare sunt
reversibile, astfel c, se restaureaz BD la starea care exist apriori
acestui punct de sincronizare. Softwarele BD ce utilizeaz alte

10

limbaje BD dect SQL dau comenzi ce realizeaz funcii


echivalente pentru funciile COMMIT i ROLLBACK.
Protocolul commit n 2 faze
Funciile de generare si management ale tranzaciilor sunt complexe n
special cnd programul de aplicaie i softul de gestiune al BD sunt
executate ntr-un mediu distribuit.
Funciile de gestiune a tranzaciilor sunt n mod obinuit implementate
prin utilizarea unui protocol COMMIT n 2 faze ce controleaz prelucrrile
necesare la comitere, i schimbrile pe care componentele aplicaiei le-a
fcut. Termenul de protocol este mult ntlnit n literatura de comunicaie
dintre calculatoare.
Un protocol este o specificaie ce arat formatele mesajelor dintr-o
mulime dat care sunt trimise ntre 2 sau mai multe procese de
comunicaie i specific regulile ce guverneaz aceste schimbri.
Un protocol COMMIT n 2 faze const din mesaje ce sunt trimise ntre
diverse componente ale unui sistem distribuit pentru controlul proceselor
COMMIT i ROLLBACK.
Protocolul este utilizat s ne asigure c fiecare tranzacie este fie
executat n ntregime ca o unitate complet de lucru sau c schimbrile ce
au fost fcute de o tranzacie abortat sunt stabilite complet.
Managerul de resurse
n mediu distribuit, operaiile ROLLBACK i COMMIT trebuie s fie
coordonate de o componen software ce are o vedere global a unui mediu
ntregime distribuit. Aceast component este numit manager de resurse.
Managerul de resurse trebuie s fie capabil s comunice cu software
de acces la BD ce se execut pe fiecare main ntr-un mediu distribuit.
Pentru a spori disponibilitatea, trebuie ca orice main din mediul distribuit
s poat fi capabil de a executa o component a managerului de resurse,
dar n mod obinuit numai un manager de resurse este activ n orice
moment de timp pentru o resurs protejat.
Operaia commit n 2 faze(C2F)
n continuare se arat o descriere simplificat a unei prelucrri care
trebuie s fie realizat la executarea fiecrei faze a protocolului C2F.
Programul de aplicaie ncepe o operaie COMMIT n 2 faze prin
invocare funciei COMMIT ce stabilete un punct de sincronizare.
Softwareul BD locale ncepe operaia COMMIT prin informarea
11

gestionarului de resurse, adic este declarat punctul de sincronizare i ce


gestionar de resurse ar trebui s nceap prelucrrile comise. Dac
softwareul BD local i gestionarul de resurse sunt executate pe maini
diferite, aceasta implic un schimb de mesaje COMMIT i de cunoaterea
recipienilor ale mesajelor COMMIT n reea.
Softwareul local al BD ncepe operaia COMMIT prin informarea
managerului de resurse c s-a declarat un punct de sincronizare i c MR
poate s nceap procesarea comis. Dac softwareul BD locale i MR
sunt executate pe maini diferite, acestea implic un schimb de mesaje cu
reeaua i o confirmare a primirii mesajelor. Toate subsecvenele de
prelucrare implicate n execuie a protocoalelor COMMIT n 2 faze sunt
coordonate de managerul de resurse.
FAZA I. PREGATIREA COMMIT
Managerul de resurse (MR) trimite pentru pregtire un mesaj
COMMIT la fiecare component de acces la BD care acceseaz fiecare
cte o partiie a BDD i care poate s schimbe rezultate cu prelucrrile
tranzaciilor. Aceste componente soft pot fi executate pe aceiai main sau
pe maini diferite pentru MR i programul de aplicaie ce cuprinde funcia
COMMIT.

Figura 1. Faza 1 a unei operaii COMMIT ntr-o BD.


FAZA 2. COMMIT/ROLLBACK
Faza a II-a a protocolului COMMIT n dou faze ncepe numai dac

toate componentele software de acces la BD rspund afirmativ la mesajele


12

COMMIT de pregtire ale managerul de resurse (MR). MR ncepe faza 2 a


protocolului prin trimiterea unui mesaj COMMIT la toate componentele

software de acces la BD. Cnd fiecare Component software de acces la


BD (CSABD) a primit mesajul COMMIT, acestea realizeaz schimbrile n
partiiile lor ale BD. Fiecare CSABD informeaz MR c operaia COMMIT
este complet realizat n fiecare partiie rspunznd cu o afirmaie pozitiv
la mesajul COMMIT.
Dac MR a primit afirmaii pozitive de la toate mesajele COMMIT
trimise de el atunci MR consider c operaia COMMIT s-a realizat cu
succes. Apoi MR rspunde cu o afirmaie pozitiv la mesajul COMMIT
trimis iniial de softwareul de acces la BDL din partea programului de
acces. Figura 2 rezum prelucrrile implicate n faza a II-a de realizare a
operaiei COMMIT.
Dac o component de acces la BD nu poate s realizeze schimbrile,
ca rspuns , MR d o afirmaie negativ la mesajul COMMIT. Dac MR
primete o afirmaie negativ la mesajul COMMIT trimis de el, el
consider c operaia COMMIT a fost eronat. De asemenea absena
mesajului COMMIT de la o componet este considerat ca o afirmaie
negativ. MR care la manipulare a ntlnit o eroare determin ca toate
schimbrile s fie aduse la starea iniial (ROLLBACK). Programul de
aplicaie poate elimina eroarea prin restartarea lui ncercnd s execute
tranzacia.

Figura 2. Faza 2 a unei operaii commit ntr-o BD


Paii de prelucrare cuprini n operaia COMMIT n 2 faze au fost
simplificai
claritate. Totui scopul protocolului COMMIT n dou faze
este s asigure c fac toate schimbrile baz sunt asociate tranzaciei care
a fost realizat cu succes fie toate schimbrile au fost ROLLBACK. O
eroare la orice punct ntr-o prelucrare
restaurarea BD la starea care a
fost naintea nceperii execuiei tranzaciei.

13

CONTROLUL CONCURENEI

Mecanismul de control al concurenei trebuie s elimine


anomaliile care duc la rezultate eronate i la baze de date distribuite
neconsistente. Aceste anomalii sunt determinate de pierderi de actualizri,
citiri de date intermediare i analize inconsistente.
Pierderea de actualizari este ilustrat de execuia secvenei
urmtoare de tranzacii, care se aplic pentru acelai atribut din aceeai
nregistrare:
1
2
3
4
5
6

T1: READ A
T2:
READ A
T1: A := A 1
T1: WRITE A
T2:
A := A 1
T2:
WRITE A
n aceast secven atributul A dup terminarea celor dou
tranzacii T1 i T2 ia aceeai valoare. Dac A ar reprezenta un atribut de
rezervare al unui loc atunci aceast secven ar duce la vnzarea unui loc de
mai multe ori.
Anomalia determinat de citiri de date intermediare se ntmpl
de obicei cnd una din tranzacii este anulat. Aceasta este ilustrat de
urmtoarea secven de tranzacii:
1
2
3
4
5
6
7

T1:
T1:
T1:
T2:
T1:
T2:
T2:

READ A
A := A + 1
WRITE A
READ A
ROLLBACK
A := A + 1
WRITE A

i n aceast secven, tranzaciile acioneaz asupra atributului A


din aceeai nregistrare. La momentul 4 tranzacia T1 va incrementa
valoarea lui A care apoi este modificat la momentul 7. Tranzacia T2 va
scrie n nregistrare o valoarea a lui A mrit cu 2. n aceast secven
anularea tranzaciei T1 din diverse motive (pene hardware, eroare de
14

introducere a datelor, etc.) va aduce valoarea lui A la momentul iniial, n


acest caz tranzacia T2 utilizeaz valori care nu exist n baza de date.
Anomalia numit dependen nenregistrat provine din faptul c tranzacia
T2 a citit rezultate intermediare ale tranzaciei T1.
Analiza inconsistenei este pus n eviden de secvena de
tranzacii urmtoare care se execut n mod concurent. Tranzacia T 1
calculeaz suma total ST a unei curse aeriene, tranzacia T2 transfer din
contul clientului C3 n contul clientului C1 cu care a cltorit mpreun.
n mod normal suma total ar trebui s fie neschimbat indiferent
n ce cont este transferat suma S =100.
T1: READ C1: SOLD
(SOLD 1000)
T2:
ST := ST + SOLD
T1: READ C2: SOLD
(SOLD 2000)
T1: ST := ST + SOLD
T2:
READ C3: SOLD
(SOLD 3000)
T2:
SOLD : SOLD 100
T2:
WRITE C3: SOLD
T2:
READ C1: SOLD
(SOLD 1000)
T2:
SOLD : SOLD + 100 (SOLD = 1100)
T2:
COMMIT
T1: READ C3: SOLD
(SOLD = 2900)
T1: ST := ST + SOLD
T1: WRITE ST
(5900)
Prin urmare, cele mai multe baze de date sunt folosite n acelai timp de
mai muli utilizatori. Dac se efectueaz numai citiri nu apar probleme.
Probleme deosebite apar n momentul n care unele operaii privesc
modificarea unor elemente din baza de date cnd pot s apar inconsistene
i anomalii.

Accesul concurent la date

Tranzacia poate s conin o singur cerere sau o serie de instruciuni


exprimate ntr-un limbaj gazd sau limbaj de interogare. Baza de date poate
conine elemente ce pot fi blocate la un moment dat. Blocarea permite
accesul unei tranzacii la acel moment i interzice accesul la celelalte
tranzacii pn la terminarea tranzaciei curente, cnd are loc o deblocare.

15

Evidena elementelor blocate i atribuirea de tranzacii diferitelor elemente


este realizat de administratorul de blocare.
Nivelul de blocare este diferit de la sistem la sistem. Se pot bloca relaii,
tupluri, grupuri de elemente i elemente. Blocarea la nivel nalt ocup cel
mai puin timp i cel mai puin spaiu. Se introduce inconsisten prin
accesul concurent n urmtoarele situaii:
pierderi de reactualizri cnd dou tranzacii T1 i T2 execut n
paralel programul
p: READ A; A := A + 1; WRITE A;
anularea unor modificri efectuate de tranzacii care nu se termin
normal;
considerarea de stri de tranziie a bazei de date.
Aceste anomalii se pot elimina dac fiecare tranzacie nu permite accesul
la un element dect dup ce s-au terminat toate operaiile.
Un program care permite aceasta este:
p: LOCK READ A; A A + 2; WRITE A; UNLOCK A;
Prin succesiuni de forma:
blocare execuie deblocare
se pot asigura sincronizrile diferitelor operaii din tranzaciile unei baze de
date.
Pot s apar:
ateptare la nesfrit (LIVELOCK);
interblocare (DEADLOCK).
Ateptarea la nesfrit poate s apar cnd o tranzacie ateapt
utilizarea unui element care este ocupat de alte tranzacii din sistem.
Aceasta poate fi eliminat prin utilizarea unui fir de ateptare.
Interblocarea apare cnd tranzacia conine elemente cerute de alte
tranzacii i la rndul su cere alte elemente, ajungndu-se la o ateptare n
cerc nchis.
Rezolvarea interblocrii se face prin:
satisfacerea tuturor cererilor de elemente pentru o tranzacie nainte de
a o executa;
impunerea unei ordini asupra elementelor;
prezentarea cererilor de elemente n tranzacii;
determinarea i tratarea interblocrilor prin ntreruperea i reluarea unor
tranzacii.
O problem este legat de rezultatul obinut prin aplicarea unor tranzacii.
Ordinea pailor din tranzacie n care sunt executai se numete programare
a unei tranzacii. Ordinea pailor din programare coincide cu ordinea de
execuie n tranzacia respectiv.
16

O programare se numete serial dac pentru fiecare tranzacie paii si


apar consecutiv n programare.
O programare se numete serializabil dac rezultatul este echivalent cu al
unei programri seriale.Considerm tranzaciile:
T1: READ A; A := A 1; WRITE A; READ B; B := B + 10; WRITE B;
T2: READ B; B := B + 10; WRITE B; READ C; C := C + 20; WRITE C;
T1

T2

READ A
A := A + 10
WRITE A
READ B
B := B + 10
WRITE B
READ B
B := B 20
WRITE B
READ C
C := C + 20
WRITE C
T1

T2

READ A
READ B
A := A 10
B := B 10
WRITE A
WRITE B
READ B
READ C
B := B + 10
C := C + 20
WRITE B
WRITE C
Tranzacii seriale
T1

T2

17

READ A
A := A 10
READ B
WRITE A
B := B + 20
READ B
WRITE B
B := B + 10
READ C
WRITE B
C := C + 20
WRITE C
Tranzacie neserial
Evitarea interblocrii i posibilitatea serializrii unor programe sunt
asigurate prin impunerea unor condiii asupra ordinii de efectuare a
fiecrei tranzacii numit protocol. n intervalul de timp dintre efectuarea
unei operaii LOCK A dintr-o tranzacie i urmtoarea operaie UNLOCK
A se spune c tranzacia deine sursa A. Pentru fiecare pereche LOCK A i
UNLOCK A se asociaz o funcie f(A) care arat cum se transform. Dac
s 0 este valoarea iniial n care blocrile i deblocrile lui A au asociate
funciile f 1 ,f 2 ,..., f k d n final pentru A valorile f k (...f 0 (s 0 )).
0 START ATS, Algoritm de testare a serializabilitii
1 INPUT S = T1, T2, ..., Tk
2 CALL DDAG(S; G)
3 IF G cicluri
THEN
3.1 OUTPUT S nu este serializabil
ELSE
3.2 OUTPUT S este serializabil
4 STOP
Exist un protocol simplu care asigur serializabilitatea numit protocol
n dou faze care impune tuturor tranzaciilor de a face nti blocrile i
apoi deblocrile.
Teorema 1 Programarea S este serializabil dac conine tranzacii n
dou faze.
Din algoritm rezult c S conine un graf G care cuprinde un ciclu
T il T ir T is ... T ik T il
ceea ce duce la deblocarea lui T ij , se face dup blocarea lui T ik .

18

19