Sunteți pe pagina 1din 21

Tranzacții

Curs

1
Tranzacții-principii de bază
 O succesiune de comenzi (de obicei,
DML);
 Funcționează pe principiul toţi pentru
unul, unul pentru toţi (totul sau nimic);
 ROLLBACK – comanda care anulează
toate instrucţiunile în caz de eşec;
 COMMIT – sunt consemnate toate
modificările în baza de date

2
Tranzacții-principii de bază
 Unitate de lucru logică, atomică care
conţine una sau mai multe instrucţiuni
SQL;
 Instrucţiunile din cadrul unei tranzacţii,
fie sunt toate executate, fie execuţia
tuturor este anulată (ca un fel de
UNDO din baza de date);
 În Oracle fiecare tranzacţie are un
identificator unic transaction ID;
3
Tranzacții-principii de bază
 Respectă principiile ACID:
 Atomicitate: toate operaţiile din cadrul
unei tranzacţii sunt efectuate ca un tot
unitar (de exemplu, dacă în cadrul
execuţiei unei inserări de 30 de
înregistrări apare o problemă după 20 de
inserări, atunci aceste 20 de inserări
sunt anulate);

4
Tranzacții-principii de bază
 Respectă principiile ACID:
 Consistenţă: tranzacţiile transformă o
bază de date consistentă într-o altă stare
consistentă a bazei de date(de exemplu,
dacă într-o tranzacţie bancară se
realizează un transfer de bani dintr-un
cont în altul, trebuie să nu permită doar
extragerea banilor din primul cont şi
pierderea conexiunii în momentul în care
se doreşte debitarea celuilalt cont);
5
Tranzacții-principii de bază
 Respectă principiile ACID:
 Izolare: efectul unei tranzacţii este vizibil
altei tranzacţii doar dacă aceasta a fost
executată în totalitate (de exemplu, un
utilizator care introduce date în tabelul
cu salariaţi nu trebuie să vadă
modificările nevalidate, efectuate de
către un alt utilizator asupra aceluiaşi
tabel);

6
Tranzacții-principii de bază
 Respectă principiile ACID:
 Durabilitate: modificările efectuate în
urma validării unei tranzacţii sunt
permanente (de exemplu, se poate
reveni la starea iniţială a bazei de date
doar prin intermediul unui set de
instructiuni ce ar acţiona într-o ordine
inversă decât instrucţiunile ce au
aparţinut tranzacţiei)

7
Tranzacții-exemplu
 Transfer numerar între conturi bancare
 Bază de date dintr-o bancă;
 Un client transferă bani din contul curent
în contul de economii, ceea ce determină
următoarele operaţiuni:
 Scăderea valorii din contul curent;
 Creşterea valorii din contul de economii;
 Înregistrarea tranzacţiei într-un jurnal al
tranzacţiilor

8
Tranzacții-exemplu
 Dacă apar diverse probleme, cum ar fi
fondurile insuficiente, număr de cont
invalid, sau pur şi simplu o problemă
hardware, aceste lucru împiedicând una
din cele n acţiuni să se execute cu
succes, atunci toate elementele
componente ale tranzacţiei vor fi
anulate, baza de date având starea de
dinainte de tranzacţie.

9
Tranzacții-exemplu

10
Tranzacţii-începutul unei
tranzacţii
 Începe cu prima instrucţiune SQL
executabilă;
 O instrucţiune SQL executabilă – o
instrucţiune care generează apeluri către
baza de date, incluzând atât instrucţiuni
DML, DDL precum şi instrucţiunea SET
TRANSACTION (instrucţiune folosită de
cele mai multe ori la început de tranzacţie,
care ne ajută să dăm un nume tranzacţiei,
dar nu numai)
11
Tranzacţii-sfârşitul unei
tranzacţii
 O tranzacţie se termină în una din
următoarele situaţii:
 Userul lansează o comandă COMMIT sau
ROLLBACK fără folosirea unei clauze
SAVEPOINT;
 Userul foloseşte comenzi DDL, cum ar fi
CREATE, DROP, RENAME sau ALTER;
 Userul părăseşte aplicaţia în care a lucrat, toate
instrucţiunile fiind validate;
 Userul părăseşte forţat aplicaţia, toate
instrucţiunile fiind invalidate.

12
Tranzacţii-controlul tranzacţiilor
 COMMIT
 termină tranzacţia curentă şi determină efectuarea
tuturor instrucţiunilor din ea;
 Determină ştergerea tuturor savepoint-urilor din
tranzacţie;
 ROLLBACK
 Elimină acţiunile instrucţiunilor din cadrul tranzacţiei
curente;
 SAVEPOINT
 Identifică un punct dintr-o tranzacţie la care ne-am
putea întoarce cu un ROLLBACK.

13
Tranzacţii-controlul tranzacţiilor

14
Tranzacţii-controlul tranzacţiilor

15
Tranzacţii-controlul tranzacţiilor

16
Tranzacţii – numele atribuit
 Este opţional;
 Poate fi atribuit de către utilizator
pentru a face referire ulterioară la
aceasta;
 SET TRANSACTION NAME …;
 De cele mai multe ori stabilit la
început de tranzacţie

17
Tranzacţii – numele atribuit
 Avantaje:
 Ajută la monitorizarea uşoară a tranzacţiilor lungi, sau
poate să ducă la rezolvarea unor probleme legate de
tranzacţiile distribuite;
 Numele tranzacţiei poate însoţi id-ul acesteia în aplicaţii.
Astfel, administratorul poate observa ce tranzacţii
rulează;
 Baza de date scrie numele tranzacţiei în anumite
înregistrări în redo log, ceea ce poate duce la verificarea
diferitelor tranzacţii care au avut loc;
 Poate fi folosit acest nume pentru a căuta o anumită
tranzacţie în dicţionarul de date (SELECT * FROM
V$TRANSACTION)

18
Tranzacţii – savepoint-uri
 Un marker declarat de către utilizator într-o tranzacţie;
 Permite împărţirea unei tranzacţii în mai multe secţiuni;
 Rollback to savepoint:
 Eliminarea anumitor acţiuni efectuate după un anumit
savepoint;
 Când o tranzacţie revine la un savepoint:
 Baza de date Oracle elimină doar acţiunile de după savepoint: Exemplu,
rollback-ul către savepointul salariulvanzator a eliminat doar acţiunile ce
au avut loc asupra salariului agentului vânzări;
 Baza de date Oracle păstrează activ acest savepoint, iar toate
savepointurile de după el dispar: Exemplu, savepoint-ul
salariulagentvanzari nu mai este activ;
 Baza de date Oracle eliberează toate tabelele şi înregistrările care au fost
blocate de acţiunile care şi-au pierdut din efect, dar menţin în continuare
blocate acele elemente care apar înaintea savepoint-ului menţionat.

19
Tranzacţii blocate

20
Tranzacţii blocate

21

S-ar putea să vă placă și