Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
Statistica

TRANZACTII - Conditii de terminare a tranzactiilor

finante



+ Font mai mare | - Font mai mic



TRANZACTII



Definitii

Conceptele de; tranzactie, consistenta si concurenta sunt definite pentru un sistem de baze de date distribuite. In timpul operatiilor de actualizare (modificare adaugare si stergere) baza de date trece dintr-o stare in alta stare. Afirmatiile pe care trebuie sa le satisfaca la anumite momente, formeaza restrictiile de integritate.

O stare a unei baze de date este consistenta daca ea satisface la anumite momente toate restrictiile de integritate ale datelor definite asupra sa. Starea rezultata din orice prelucrare trebuie sa fie consistenta.

Tranzactia este o actiune sau o serie de actiuni, realizate de un utilizator sau un program de aplicatie prin care se citeste sau se actualizeaza continutul unei baze de date. Tranzactia este o unitate logica de lucru cu baza de date. Ea poate fi ; un program, o parte a unui program sau o singura comanda ( ca de exemplu, comenzile SQL INSERT si UPDATE)

Problemele care se pun sunt:

Ce se intampla daca doua intrebari asteapta sa actualizeze acelasi element de data sau daca se realizeaza o eroare de sistem pe parcursul executiei unei intrebari de actualizare a aceluiasi element. In acest caz, nu putem sa restartam executia unei intrebari de actualizare intrerupta in urma unei erori, deoarece anumite elemente de date au fost actualizate mai inainte de realizarea acestui eveniment.

Inlaturarea efectelor negative a intrebarilor de actualizare asupra bazei de date.

Din aceste observatii rezulta ca: Nu exista notiuni de executie consistenta si in siguranta a unei intrebari. Siguranta se refera la toleranta fata de erori (pene, defecte etc.) si la capacitatea de recuperare dupa aparitia unei erori. Trebuie ca baza de date sa ramana intr-o stare consistenta chiar daca exista un numar mare de cereri de actualizare care o acceseaza concurent. O alta situatie se refera la cazul cand baza de date este replicata si intr-o stare eventual consistenta adica toate copiile elementelor au aceeasi valoare. Conceptul de tranzactie este introdus ca o unitate de baza a consistentei si a sigurantei. Intrebarile de actualizare sunt executate ca tranzactii in timp ce strategiile de executie sunt determinate de ordinea operatiilor asupra bazei de date. Este esential ca atunci cand se termina tranzactia asupra bazei de date aceasta sa ramana intr-o stare consistenta. Intuitiv, tranzactia este o succesiune de operatii: de citire, de scriere si de calcul dintr-o, respectiv intr-o baza de date ce constituie o unitate de prelucrare care satisface proprietatile A.C.I.D.

Unitatea de prelucrare se executa in totalitate adica tranzactia este atomica (proprietatea A) si indivizibila (proprietatea I).

Componenta unui SGBD care asigura respectarea acestor proprietati se numeste manager de tranzactii (MT) (transaction manager). MT asigura aceste proprietati cu ajutorul functiilor: COMMIT si ROLLBACK.

Prima semnalizeaza incheierea cu succes a tranzactiei si a doua semnalizeaza esuarea tranzactiei si provoaca abandonarea consecintelor prin refacearea structurii initiale.

O tranzactie trebuie sa transforme o stare consistenta a BD intr-o alta stare consistenta a BD (proprietatea C). Deoarece operatiile care o compun se executa secvential in intervalul de timp, de la inceputul pana la sfarsitul executiei tranzactiei este posibil ca BD sa nu fie intr-o stare consistenta. De exemplu tranzactia care transfera 10 milioane din contul A in contul B se executa in mai multe etape. Mai intai se scade din contul A apoi se adauga in contul B. Intre cele doua etape, BD este intr-o stare inconsistenta deoarece suma nu este in nici un cont. Pastrarea consistentei este necesara chiar cand tranzactia esueaza, prin operatia rollback, cand BD este adusa la starea anterioara inceperii tranzactiei. Momentul inceperii unei tranzactiei poate fi exprimat explicit sau coincide cu momentul terminarii tranzactiei anterioare. Astfel se poate intampla ca mai multe tranzactii actioneaza asupra acelorasi BDD.

Din proprietatea de consistenta (C) a starii BD rezulta ca tranzactia trebuie sa opereze numai asupra unei stari consistente a BD. De aceea executiile tranzactiilor trebuie sa fie separabile (izolate). Actualizarile trebuie sa fie persistente (durabile, proprietatea D). In mod practic acest mecanism este implementat prin formalizarea operatiilor si tranzactiilor ce actioneaza asupra BD.

Conditii de terminare a tranzactiilor

Deoarece multimea de operatii care compune tranzactia este finita si ordonata, executia lor se termina in succes intr-un interval finit si aceasta este marcata de operatia COMMIT sau daca tranzactia se termina din cauza unei erori, atunci tranzactia nu reuseste sa execute toate operatiile prevazute si se termina prin ROLLBACK (Abort). In cazul abortarii executia este oprita, iar efectele tuturor operatiilor pe care le-a executat pana in acel moment sunt anulate, astfel incat BD revine la starea dinaintea tranzactiei.

Comanda de validare a tranzactiei marcheaza momentul incepand de la care efectele tranzactiei nu mai pot fi anulate, adica modificarile facute sunt permanente si indica SGBD-ului momentul de la care efectele tranzactiei devin vizibile altor tranzactii si reflecta starea BD. Este posibil ca unele tranzactii executate in mod concurent cu tranzactia T sa fi accesat aceste date inainte de abortarea lui T. Aceste tranzactii vor fi abortate deoarece au avut acces la date inconsistente din BD ceea ce inseamna ca rezultatele pot fi eronate. Acest efect se poate propaga in continuare si asupra altor tranzactii conducand la abortarea in cascada a tranzactiilor (efectul domino). Daca se foloseste un mecanism de validare care respecta urmatoarele doua reguli atunci aparitia fenomenului de abortare in cascada devine imposibila:

nici o tranzactie nu va putea accesa datele modificate de o tranzactie T decat dupa validarea acesteia;

pe de alta parte, o data ce tranzactia e valida aceasta nu mai poate fi abortata si astfel nu mai poate fi declansata abortarea in cascada.

Operatia COMMIT marcheaza terminarea tranzactiei din punct de vedere logic. Validarea se face numai dupa ce toate operatiile ce formeaza tranzactia au fost executate. Pana in momentul validarii (COMMIT) actualizarile efectuate de tranzactie sunt invizibile altor tranzactii si pot fi oricand revocate si odata cu executia operatiei ROLLBACK.

Proprietatile tranzactiei

Prin definitie, tranzactiile sunt unitati logice de prelucrare care garanteaza consistenta si siguranta bazei de date. Am vazut ca o tranzactie trebuie sa satisfaca proprietatile A.C.I.D. Atomicitate, Consistenta, Izolare si Durabilitate) pe care le detaliem mai jos.

Atomicitatea. Aceasta proprietate inseamna ca tranzactia este considerata o unitate logica de prelucrare elementara a carei executie se face dupa regula " totul sau nimic" adica ori se executa toate operatiile din tranzactie ori cele care s-au executat partial nu sunt considerate. Daca tranzactia este intrerupta datorita unor cauze oarecare, atunci SGBD-ul are sarcina intr-un fel sau altul de a termina tranzactia. Dupa eliminarea cauzei care a dus la intreruperea tranzactiei, in functie de stadiul de executie in care s-a aflat in momentul intreruperii SGBD poate proceda in doua moduri:

- fie completeaza operatiile ramase neexecutate din cadrul tranzactiei terminand tranzactia cu succes

- fie anuleaza toate efectele operatiilor executate de tranzactie pana la momentul intreruperii, terminand tranzactia prin abort.

Consistenta. Orice tranzactie executata independent trebuie sa pastreze consistenta bazei de date. Am vazut ca aceasta succesiune de operatii constituie un program care trebuie sa transforme baza de date dintr-o stare consistenta intr-o alta stare consistenta. Adica sa conserve restrictiile de integritate din care amintim:

- dependentele,

- unicitatea cheilor primare,

- integritatea referentiala,

- orice predicat care defineste o restrictie de integritate a bazei de date.

Verificarea acestei proprietati ramane in seama programatorului.

Izolarea. Este proprietatea tranzactiei de a avea acces doar la starile consistente ale bazei de date. Aceasta inseamna ca modificarile efectuate de catre o tranzactie sunt inaccesibile altor tranzactii concurente pana in momentul validarii acesteia. Utilizatorul care a lansat o tranzactie nu va percepe in nici un fel faptul ca alte tranzactii sunt executate in acelas sistem. Izolarea tranzactiei este asigurata de algoritmii de control pentru concurenta.

Conceptul de izolare este caracterizat prin cel de seriabilitate dar nu se confunda. Seriabilitatea este o conditie suficienta de realizare a izolarii dar nu si necesara. Proprietatea de izolare elimina abortarea in cascada a tranzactiilor. Intr-adevar daca rezultatele incomplete ale unei tranzactii ar fi vizibile altor tranzactii, inainte de executia operatiei COMMIT si daca se intampla ca aceasta operatie sa aborteze atunci toate tranzactiile care au accesat operatiile incomplete ar trebui sa aborteze.

Durabilitatea. Durabilitatea este o proprietate a tranzactiei care garanteaza ca, daca tranzactia se termina prin operatia COMMIT atunci rezultatele ei devin permanente si sunt scrise in baza de date. Chiar daca dupa momentul validarii apare un incident care impiedica inscrierea normala a rezultatelor tranzactiei in baza de date, acestea vor fi inregistrate dupa reluarea activitatii. Mecanismul prin care se realizeaza proprietaea D (durabilitate) are la baza conceptul de jurnal. Jurnalul este un fisier secvential in care sunt inregistrate din sistem si contine istoria evolutiei intregului sistem. Este folosit la reluarea activitatii a procedurilor de recuperare care vor completa eventualele operatiuni neterminate ale tranzactiilor care au fost nevalidate inainte de aparitia erorii.

Exemplul 1. Fie sistemul de rezervare de locuri pentru liniile aeriene a carui baza de date este compusa din relatiile :

- cursa (NR, AEROPORT_DEC ATERIZARE, LOCALITATE, DATA, APACITATE)

client (CNP, NUME, PRENUME, ADRESA)

rezervare (NR, CNP, OBSERVATII)

Atributele care compun schemele relatiilor au semnificatiile urmatoare:

NR - reprezinta numarul cursei,

AEROPORT_DEC, ATERIZARE - reprezinta aeroporturile de decolare si aterizare.

CNP - codul numeric personal al clientului,

NUME, PRENUME - reprezinta numele si prenumele clientului,

OBSERVATII - sunt informatii referitoare la rezervare.

Pentru a face o rezervare se introduce codul zborului solicitat NRC si codul numeric personal al clientului si eventuale observatii de cel care doreste rezervarea.

TRANSACTION rezervare

Begin

INPUT

EXEC SQL

UPDATE cursa

SET CAP=CAP-1

WHERE NR=NRC

EXEC SQL

INSERT INTO rezervare (NR, CODP, OBS)

VALUES (NRC, CNP, NULL)

OUTPUT ("Rezervare efectuata")

End.

Exemplul 2. Reintorcandu-ne la exemplul 1 s-ar putea ca sa nu fie locuri la cursa si data ceruta.

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 exista locuri libere")

ROLLBACK

End

Else

EXEC SQL

UPDATE cursa

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 tranzactie

Tranzactia este o multime finita si ordonata de operatii de citire si scriere la care se adauga operatii de calcul si de terminare ce constituie o unitate de prelucrare care satisface proprietatile A.C.I.D.

Pentru a judeca corectitudinea algoritmilor de gestiune este necesar sa definim in mod formal conceptele de tranzactie. Vom formaliza conceptele care exprima numai tranzactii ce exprima intrebari de modificare.

Prin urmare tranzactia corespunde unei intrebari de actualizare ce realizeaza accesul la un element de data pentru modificarea lui. Am vazut ca, tranzactia este o unitate de prelucrare care se executa in intregime sau deloc, (adica satisfac proprietate de atomicitate A).

Elementele necesare pentru a modelarea unei tranzactii sunt:

E - o multime de operatii de citire si de scriere,

F - a operatiilor de terminare,

G - o multime de operatii de calcul,

A E F G si o relatie de preordine pe A.

Cuplul T A se numeste tranzactie. Relatia de preordine pe multimea operatiilor A indica ordinea de executie a operatiilor componente si va fi citita prin " precede in executie" .

In continuare, notam cu S starea bazei de date si C o multime de restrictii pe care trebuie sa le satisfaca starile bazei de date. Tranzactia este data de unde ai reprezinta o operatie (actiune, task). Tranzactia trebuie sa satisfaca proprietatea de consistenta (proprietatea C) adica sa transforme starea S care satisface restrictiile C intr-o alta stare T(S) care satisface de asemenea C

Formal SIC TT(S) IC

La terminarea tranzactiei operatiile care au fost executate nu mai pot fi aduse la starea initiala aceasta inseamna ca tranzactia este durabila, (satisface proprietatea D).

Operatiile dintr-o tranzactie se executa autonom fata de operatiile din alte tranzactii (proprietatea i).

Tranzactia este o prelucrare care apeleaza cel putin o data o operatie de scriere a unei date care a fost modificata adica contine in mod obligatoriu o operatie de scriere.

Asadar o tranzactie se defineste formal ca relatie de ordine partiala

Ti=(Ai,i )unde:

1.

aij, aikIEi si exista un element de data x la care acestea se aplica fie ca:

si fie

si fie

si atunci fie aiji aik fie aiki aij

3. avem aiji aik daca aikIFi.

Prima conditie defineste domiciliul A al relatiei de preordine .

A doua conditie arata ca intre orice doua operatii conflictuale exista o ordine de precedenta in executie. Doua operatii sunt conflictuale daca ambele acceseaza aceiasi data si cel putin una din ele este de tip scriere.

Ordinea de precedenta in executie a operatiilor determina tranzactia. Conditia 3 arata ca toate operatiile tranzactiei trebuie sa preceada conditia de terminare.

Exemplul 1. Fie tranzactia T data de secventa.

A= unde preordinea

Tipuri de tranzactii

Tranzactiile pot fi impartite in clase diferite. Clasificarea tranzactiilor se face dupa: domeniile de aplicatii, durata si structura.

Astfel tranzactia care actualizeaza date care sunt situate intr-un singur loc se numeste tranzactie regulata.

Tranzactia care actualizeaza date distribuite se numeste tranzactie distribuita. Daca operatiile se aplica asupra bazelor de date eterogene atunci tranzactiile se numesc eterogene. O dimensiune importanta pentru clasificarea tranzactiilor este durata.

Tinand cont de aceasta dimensiune distingem tranzactii on-line si tranzactii batch, care mai sunt cunoscute tranzactii short-life si tranzactii long-life.

Tranzactiile on-line sunt caracterizate printr-un timp de raspuns scurt (de ordinul catorva secunde) si prin acces la o portiune mica a bazei de date. Aceasta clasa cuprinde din aplicatiile curente cele mai.

Tranzactiile batch au un timp de executie lung (minute, ore sau zile) si acceseaza o portiune mare a bazei de date.

Aplicatiile tipice ce necesita tranzactii batch (grup) sunt: aplicatiile statistice, generarile de rapoarte, intrebari complexe. BD-CAD/CAM si procesarile de imagini.

Din punct de vedere al structurii unei tranzactii exista doua moduri de a privi structura unei tranzactii:

cand tranzactia se compune dintr-o multime ordonata de operatii de

citire, scriere de calcul si de oprire.

2. cand tranzactia poate fi divizata in subtranzactii.

Daca se considera tranzactiile din prima categorie atunci acestea au un punct de inceput un corp si un punct terminal abort sau commit.

UPDATE departament

SET BUGET=BUGET*1.1

WHERE NUME-DEP='ELECTRO'

Begin_transaction actualizare_buget

Begin

EXEC.SQL

UPDATE departament

SET Buget=Buget*1.1 WHERE departament ='ELECTRO'End.

Aceasta este numita tranzactie simpla (plata).

O alta alternativa este ca o tranzactie sa includa alte tranzactii cu puncte proprii de inceput si commit.

Aceste tranzactii sunt numite tranzactii nested.

Begin tranzaction rezervare

Begin

Begin tranzaction cursa

End cursa

Begin Hotel

End hotel

Begin masina

End masina

End

Multe din agentii fac rezervari pe langa bilete si de camere la hotel si de masini.

Software de prelucrare a tranzactiilor

Softwareul de procesare a tranzactiilor este preponderent utilizat intr-o intreprindere si duce la cresterea disponibilitatii, la realizarea unei organizari a datelor si la protectia lor la accese neautorizate.

Functiile de prelucrare a tranzactiilor pot fi manipulate de softwareul BD insusi, de unele sisteme de operare sau de ambele. Doi factori complica integritatea datelor intr-un mediu de calcul:

accesul concurent - datele memorate intr-o BD pot fi accesate concurent de o multime de utilizatori care trebuie sa actualizeze datele;

distributia datelor - datele memorate intr-o BD nu pot fi localizate toate pe un singur site. Cu un software distribuit datele pot fi memorate pe baza unui numar de scheme de calcul distribuita interconectate printr-o retea.

Solutiile acestor probleme potentiale sunt numite tranzactii. Tranzactiia este o secventa de modificari ce trebuie sa fie savarsite complet sau de loc.

Unele produse software BD implementeaza facilitati de integritate. Daca un pachet BD este utilizat pe un singur PC si de un singur utilizator nu necesita facilitati speciale de integritate. Utilizatorul este responsabil de integritatea datelor de aceea are acces limitat.

Functii de procesare a tranzactiilor

Functiile de procesare a tranzactiilor permit proiectantilor de aplicatii sa lege impreuna doua sau mai multe operatii asupra datelor astfel ca sa fie executate ca o singura unitate de lucru. Unitatea de lucru trebuie sa fie executata in intregime sau sa nu fie executata de loc. Dezvoltatorul construieste tranzactia printr-o grupare intr-o anumita ordine a mai multor operatii care formeaza o unitate de lucru.

Procesarea tranzactiilor se bazeaza pe conceptele de resursa partajata si de sincronizare a actualizarii pentru acele resurse partajate.

Astfel, notiunea de resursa partajata poate fi aplicata la orice tip de obiect dintr-un mediu de calcul, in acest paragraf vom presupune ca prin resurse partajate se intelege orice fisier de date implementat in BD.

Cand sunt utilizate functiile de gestiune a tranzactiei un program de aplicatie specifica la ce intervale are loc executia si durata ei, ce schimbari s-au facut, la ce puncte pot fi considerate permanente (comise) sau ce schimbari ar trebui sa fie refacute.

Punctele specificate din executia unei aplicatii in care schimbarile sunt fie permanente (commit) sau de revenire (rollback) sunt numite puncte de sincronizare.

In momentul cand intr-o aplicatie se declara un punct de sincronizare, trebuie stiut ca, diferite portiuni ale BD afectate de schimbarile determinate de aplicatie facute pana in acel moment (punct) sunt intr-o sincronizare cu alt punct. Intr-un mediu distribuit BD poate fi raspandita pe un numar de masini diferite.

Prin urmare, daca o eroare se realizeaza pe o masina, toate diversele portiuni ale BD pe toate masinile trebuie sa fie restaurate la starile care existau apriori fata de cel mai recent punct de sincronizare.

Apoi se restarteaza aplicatia din acel punct.

Primul punct de sincronizare al unei aplicatii este stabilit cand aplicatia incepe executia. Alt punct este de asemenea stabilit cand aplicatia s-a terminat. Daca o aplicatie nu creaza alte puncte de sincronizare, prelucrarea in intregime a aplicatiei reprezinta o singura tranzactie terminata normal cand aplicatia a facut toate schimbarile in toate partitiile BD sub controlul ei si care pot fi comise.

Aplicatia incepe executia de la primul punct de sincronizare stabilit anterior. Daca o aplicatie se executa intr-o perioada lunga de timp, este de dorit sa se divida programele componente de prelucrare intr-un numar de tranzactii separate. Daca aplicatia se termina anormal toate schimbarile ce au fost facute in BD de aplicatie trebuie sa fie aduse la valorile initiale adica sa fie ROLLBACK

Softwareul BD trebuie sa contina functii pe care programul le poate invoca pentru declararea punctelor de sincronizare la anumite intervale pe durata prelucrarii. Prelucrarea pe care programul o face intre doua puncte arbitrare succesive de sincronizare este considerata o tranzactie separata. In aceasta abordare soft BD trateaza prelucrarea asociata fiecarei tranzactii ca o unitate de lucru separata.

Instructiuni de gestiune a tranzactiilor in SQL

SQL defineste doua instructiuni considerate ca functii ale limbajului de control al datelor (DCL) care ne permit sa creem puncte de sincronizare.

COMMIT este utilizata pentru a stabili un punct de sincronizare care indica, ca toate schimbarile ce au fost facute in BD pana la acel punct sunt permanente.

ROLLBACK cand este utilizat, arata ca, schimbarile ce au fost facute in BD de la cel mai recent punct de sincronizare sunt reversibile, astfel ca, se restaureaza BD la starea care exista apriori acestui punct de sincronizare. Softwarele BD ce utilizeaza alte limbaje BD decat SQL dau comenzi ce realizeaza functii echivalente pentru functiile COMMIT si ROLLBACK.

Protocolul commit in 2 faze

Functiile de generare si management ale tranzactiilor sunt complexe in special cand programul de aplicatie si softul de gestiune al BD sunt executate intr-un mediu distribuit.

Functiile de gestiune a tranzactiilor sunt in mod obisnuit implementate prin utilizarea unui protocol COMMIT in 2 faze ce controleaza prelucrarile necesare la comitere, si schimbarile pe care componentele aplicatiei le-a facut. Termenul de protocol este mult intalnit in literatura de comunicatie dintre calculatoare.

Un protocol este o specificatie ce arata formatele ale unei multimi de mesaje care sunt trimise intre 2 sau mai multe procese de comunicatie si specifica regulile ce guverneaza aceste schimbari.

Un protocol COMMIT in 2 faze consta din mesaje ce sunt trimise intre diverse componente ale unui sistem distribuit pentru controlul proceselor COMMIT si ROLLBACK

Protocolul este utilizat sa ne asigure ca fiecare tranzactie este fie executata in intregime ca o unitate completa de lucru sau ca schimbarile ce au fost facute de o tranzactie abortata sunt stabilite complet.

Managerul de resurse

In mediu distribuit, operatiile ROLLBACK si COMMIT trebuie sa fie coordonate de o componenta software ce are o vedere globala a unui mediu intregime distribuit. Aceasta componenta este numita manager de resurse.

Managerul de resurse trebuie sa fie capabil sa comunice cu software de acces la BD ce se executa pe fiecare masina intr-un mediu distribuit. Pentru a spori disponibilitatea, trebuie ca orice masina din mediul distribuit sa poata fi capabila de a executa o componenta a manageruluide resurse, dar in mod obisnuit numai un manager de resurse este activ in orice moment de timp pentru o resursa protejata.

Operatia commit in 2 faze

In continuare se arata o descriere simplificata a unei prelucrari care trebuie sa fie realizata la executarea fiecarei faze a protocolului C2F.

PA incepe operatia COMMIT in 2 faze prin invocare functiei COMMIT ce stabileste un punct de sincronizare. Softwareul BD locale incepe operatia COMMIT prin informarea gestionarului de resurse, adica este declarat punctul de sincronizare si ce gestionar de resurse ar trebui sa inceapa prelucrarile comise. Daca softwareul BD local si gestionarul de resurse sunt executate pe masini diferite, aceasta implica un schimb intr-o retea de mesaje COMMIT si de cunoasterea recipientilor ale mesajelor COMMIT

Softwareul local al BD incepe operatia COMMIT prin informarea managerului de resurse ca s-a declarat un punct de sincronizare si ca MR poate sa inceapa procesarea comisa. Daca softwareul BD locale si MR sunt executate pe masini diferite, acestea implica un schimb de mesaje cu reteaua si o confirmare a primirii mesajelor. Toate subsecventele de prelucrare implicate in executie a protocoalelor COMMIT in 2 faze sunt coordonate de managerul de resurse.

Faza I. pregatirea COMMIT

Managerul de resurse trimite pentru pregatire un mesaj COMMIT la fiecare componenta de acces la BD care acceseaza fiecare cate o partitie a BDD si care poate sa schimbe rezultate ale prelucrarilor tranzactiilor. Aceste componente soft pot fi executate pe aceiasi masina sau pe masini diferite pentru MR si programul de aplicatie ce implica functia COMMIT

Figura 1. Faza 1 a unei operatii COMMIT intr-o BD.

Faza II. commit/rollback

Faza a II-a a protocolului COMMIT in doua faze incepe numai daca toate componentele software de acces la BD raspund afirmativ la mesajele COMMIT de pregatire ale managerul de resurse (MR). MR incepe faza 2 a protocolului prin trimiterea unui mesaj COMMIT la toate componentele software de acces la BD. Cand fiecare Componenta software de acces la BD (CSABD) a primit mesajul COMMIT, acestea realizeaza schimbarile in partitiile lor ale BD. Fiecare CSABD informeaza MR ca operatia COMMIT este complet realizata in fiecare partitie raspunzand cu o afirmatie pozitiva la mesajul COMMIT

Daca MR a primit afirmatii pozitive de la toate mesajele COMMIT trimise de el atunci MR considera ca operatia COMMIT s-a realizat cu succes. Apoi MR raspunde cu o afirmatie pozitiva la mesajul COMMIT trimis initial de softwareul de acces la BDL din partea programului de acces. Figura 2 rezuma prelucrarile implicate in faza a II-a de realizare a operatiei COMMIT

Daca o componenta de acces la BD nu poate sa realizeze schimbarile, ca raspuns , MR da o afirmatie negativa la mesajul COMMIT. Daca MR primeste o afirmatie negativa la mesajul COMMIT trimis de el, el considera ca operatia COMMIT a fost eronata. De asemenea absenta mesajului COMMIT de la o componeta este considerata ca o afirmatie negativa. MR care la manipulare a intalnit o eroare determina ca toate schimbarile sa fie aduse la starea initiala (ROLLBACK). Programul de aplicatie poate elimina eroarea prin restartarea lui incercand sa execute tranzactia.

Figura 2. Faza 2 a unei operatii commit intr-o BD

Pasii de prelucrare cuprinsi in operatia COMMIT in 2 faze au fost simplificati claritate. Totusi scopul protocolului COMMIT in doua faze este sa asigure se ca fac toate schimbarile in baza sunt asociate tranzactiei care fie a fost realizata cu succes, fie toate schimbarile au fost ROLLBACK O eroare la orice punct intr-o prelucrare duce la restaurarea BD la starea care a fost inaintea inceperii executiei tranzactiei.

CONTROLUL CONCURENTEI

Mecanismul de control al concurentei trebuie sa elimine anomaliile care duc la rezultate eronate si la baze de date distribuite neconsistente. Aceste anomalii sunt determinate de pierderi de actualizari, citiri de date intermediare si analize inconsistente.

Pierderi de actualizari este ilustrata de executia secventei urmatoare de tranzactii, care se aplica pentru acelasi atribut din aceeasi inregistrare:

t T1: READ A

t2 T2: READ A

t3 T1: A := A - 1

t4 T1: WRITE A

t5 T2: A := A - 1

t6 T2: WRITE A

In aceasta secventa atributul A dupa terminarea celor doua tranzactii T1 si T2 ia aceeasi valoare. Daca A ar reprezenta un atribut de rezervare al unui loc atunci aceasta secventa ar duce la vanzarea unui atribut de mai multe ori.

Anomalia determinata de citiri de date intermediare se intampla de obicei cand una din tranzactii este anulata. Aceasta este ilustrata de urmatoarea secventa de tranzactii:

t T1: READ A

t2 T1: A := A + 1

t3 T1: WRITE A

t4 T2: READ A

t5 T1: ROLLBACK

t6 T2: A := A + 1

t7 T2: WRITE A

Si in aceasta secventa, tranzactiile actioneaza asupra atributului A din aceeasi inregistrare. La momentul t4 tranzactia T1 va incrementa valoarea lui A care apoi este modificata la momentul t7. Tranzactia T2 va scrie in inregistrare o valoarea a lui A marita cu 2. In aceasta secventa anularea tranzactiei T1 din diverse motive (pene hardware, eroare de introducere a datelor, etc.) va aduce valoarea lui A la momentul initial, in acest caz tranzactia T2 utilizeaza valori care nu exista in baza de date. Anomalia numita dependenta neinregistrata provine din faptul ca tranzactia T2 a citit rezultate intermediare ale tranzactiei T1.

Analiza inconsistentei este pusa in evidenta de secventa de tranzactii urmatoare care se executa in mod concurent. Tranzactia T1 calculeaza suma totala ST a unei curse aeriene, tranzactia T2 transfera din contul clientului C3 in contul clientului C1 cu care a calatorit impreuna.

In mod normal suma totala ar trebui sa fie neschimbata indiferent in ce cont este transferata suma S =100.

T1: READ C1: SOLD (SOLD

T2: ST := ST + SOLD

T1: READ C2: SOLD (SOLD

T1: ST := ST + SOLD

T2: READ C3: SOLD (SOLD

T2: SOLD : SOLD - 100

T2: WRITE C3: SOLD

T2: READ C1: SOLD (SOLD

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 in acelasi timp de mai multi utilizatori. Daca se efectueaza numai citiri nu apar probleme. Probleme deosebite apar in momentul in care unele operatii privesc modificarea unor elemente din baza de date cand pot sa apara inconsistente si anomalii.

Accesul concurent la date

Tranzactia poate sa contina o singura cerere sau o serie de instructiuni exprimate intr-un limbaj gazda sau limbaj de interogare. Baza de date poate contine elemente ce pot fi blocate la un moment dat. Blocarea permite accesul unei tranzactii la acel moment si interzice accesul la celelalte tranzactii pana la terminarea tranzactiei curente, cand are loc o deblocare. Evidenta elementelor blocate si atribuirea de tranzactii diferitelor elemente este realizata de administratorul de blocare.

Nivelul de blocare este diferit de la sistem la sistem. Se pot bloca relatii, tupluri, grupuri de elemente si elemente. Blocarea la nivel inalt ocupa cel mai putin timp si cel mai putin spatiu. Se introduce inconsistenta prin accesul concurent in urmatoarele situatii:

pierderi de reactualizari cand doua tranzactii T1 si T2 executa in paralel programul

p: READ A; A := A + 1; WRITE A;

anularea unor modificari efectuate de tranzactii care nu se termina normal;

considerarea de stari de tranzitie a bazei de date.

Aceste anomalii se pot elimina daca fiecare tranzactie nu permite accesul la un element decat dupa ce s-au terminat toate operatiile.

Un program care permite aceasta este:

p: LOCK READ A; A A + 2; WRITE A; UNLOCK A;

Prin succesiuni de forma:

blocare - executie - deblocare

se pot asigura sincronizarile diferitelor operatii din tranzactiile unei baze de date.

Pot sa apara:

asteptare la nesfarsit (LIVELOCK);

interblocare (DEADLOCK).

Asteptarea la nesfarsit poate sa apara cand o tranzactie asteapta utilizarea unui element care este ocupat de alte tranzactii din sistem. Aceasta poate fi eliminata prin utilizarea unui fir de asteptare.

Interblocarea apare cand tranzactia contine elemente cerute de alte tranzactii si la randul sau cere alte elemente, ajungandu-se la o asteptare in cerc inchis.

Rezolvarea interblocarii se face prin:

satisfacerea tuturor cererilor de elemente pentru o tranzactie inainte de a o executa;

impunerea unei ordini asupra elementelor;

prezentarea cererilor de elemente in tranzactii;

determinarea si tratarea interblocarilor prin intreruperea si reluarea unor tranzactii.

O problema este legata de rezultatul obtinut prin aplicarea unor tranzactii. Ordinea pasilor din tranzactie in care sunt executati se numeste programare a unei tranzactii. Ordinea pasilor din programare coincide cu ordinea de executie in tranzactia respectiva.

O programare se numeste seriala daca pentru fiecare tranzactie pasii sai apar consecutiv in programare.

O programare se numeste serializabila daca rezultatul este echivalent cu al unei programari seriale.

Consideram tranzactiile:

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;


T 1 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

Tranzactii seriale


T1 T2

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

Tranzactie neseriala

Evitarea interblocarii si posibilitatea serializarii unor programe sunt asigurate prin impunerea unor conditii asupra ordinii de efectuare a fiecarei tranzactii numit protocol. In intervalul de timp dintre efectuarea unei operatii LOCK A dintr-o tranzactie si urmatoarea operatie UNLOCK A se spune ca tranzactia detine sursa A. Pentru fiecare pereche LOCK A si UNLOCK A se asociaza o functie f(A) care arata cum se transforma. Daca seste valoarea initiala in care blocarile si deblocarile lui A au asociate functiile f,f,, f da in final pentru A valorile f (f(s)).

0 START ATS, Algoritm de testare a serializabilitatii

1 INPUT

2 CALL DDAG(S; G)

3 IF G cicluri

THEN

3.1 OUTPUT

ELSE

3.2 OUTPUT

4 STOP

Exista un protocol simplu care asigura serializabilitatea numit protocol in doua faze care impune tuturor tranzactiilor de a face intai blocarile si apoi deblocarile.

Teorema 1 Programarea S este serializabila daca contine tranzactii in doua faze.

Din algoritm rezulta ca S contine un graf G care cuprinde un ciclu

T T T T T

ceea ce duce la deblocarea lui T, se face dupa blocarea lui T.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2360
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved