Vous êtes sur la page 1sur 11

Bachtarzi.

C Cours : bases de données avancées


Niveau : Master 1 SI

Chapitre III Gestion des transactions


III-1-Définition : Une transaction est une série d'opérations qui apparaissent sous la forme
d'une large opération atomique. Soit la transaction réussit, soit elle échoue.

Exemple : transfert de compte à compte bancaire : on enlève sur un compte, on dépose sur
l'autre…

Dans la définition du langage SQL, on peut la définir comme un ensemble d’ordres SQL qui
manipulent les données d’une base de données cohérente et doivent restituer à la fin une base
dans un état cohérent.

Transaction
début
.
. → ordres SQL
.
fin

III-2- Caractéristiques d’une transaction :


Propriétés d’une transaction (ACID)

III-2-1) Atomicité : La transaction est considérée comme un élément atomique, c à d


une fois lancée, elle s’exécute jusqu’au bout ou pas du tout.
III-2-2) Cohérence : une transaction doit pouvoir manipuler des données cohérentes et
assurer leur intégrité.
III-2-3) Isolation : si deux ou plusieurs transactions s’exécutent simultanément, il ne
doit pas y avoir d’interférence entre elles. Leur exécution se fait comme si
elles étaient lancées séquentiellement.
III-2-4) Durabilité : une panne du système ne doit pas influer sur les résultats d’une
transaction qui s’est exécutée normalement.

Transaction
B.D. état B.D. état
cohérent cohérent

III-3- Fin d’une transaction : une transaction a deux issues possibles

 COMMIT : en cas de succès, et dans ce cas toutes les opérations faites sur la base sont
validées. et on ne peut plus en annuler aucune En d’autres termes les mises à jour
deviennent définitives.

 ROLL BACK : en cas d’échec, les modifications apportées à la base sont annulées
depuis le dernier commit ou rollback, ou depuis le premier ordre SQL s’il n’y a ni
commit ni rollback.

 Points de contrôle : appelés Save Points, ils sont utiles pour annuler une partie d’une
transaction.

-1-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

Début transaction
ordre SQL1
ordre SQL2
Save point SP1
ordre SQL3
Si condition X alors ROLL BACK to SP1 finsi
ordre SQL4
Fin transaction

III-4- Transactions réparties :

Dans le cas d’une transaction répartie, il faut s’assurer que toutes les mises à jour d’une
transaction sont exécutées sur tous les sites ou qu’aucune ne l’est. Si le contrôle est réparti,
chaque site peut décider de valider ou d’annuler.
Le problème revient donc à coordonner les validations inter-sites.

Validation en deux phases :


C’est un protocole qui a été proposé dans le but de coordonner l’exécution des commandes
COMMIT par tous les sites concernés par une transaction.

Principe : Le contrôle de la transaction répartie est centralisé au niveau d’un site appelé site
coordinateur. Les autres sites sont appelés participants. Ces derniers doivent obéir aux
commandes du coordinateur, à savoir : préparation, validation ou annulation d’une
transaction. L’opération de validation se déroule en 2 phases.

 Phase 1 : cette phase consiste à préparer l’écriture des résultats des mises à jour dans
la BD.

 Phase 2 : Si la phase 1 se termine avec succès, la phase 2 est lancée. Elle consiste à
reporter toutes les opérations des mises à jour dans la BD

Dialogue coordinateur-participant :

Coordinateur Participant

Préparer

Préparation
Prêt/non prêt

Valider/Abandonner

Fin Validation

-2-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

• Validation normale en commit à deux phases :


P1 Coordinateur P2
Prépare Prépare

Prêt Prêt

Valider Valider

Fin Fin

Le protocole 2PC résout les problèmes de panne sur une courte durée.

Types de pannes : - Panne réseau


- Panne du SGBD
- Panne d’un site

• Panne d’un participant avant d’être prêt :


P1 Coordinateur P2
Prépare Prépare Panne

Prêt

Annuler Annuler
Reprise
Fin

Fin

• Panne d’un participant après s’être déclaré prêt :

P1 Coordinateur P2
Prépare Prépare

Prêt Prêt

Valider Valider Panne

Fin Reprise
Prêt

Valider

Fin

Il est possible de récupérer après une éventuelle panne et de continuer le protocole de


validation, car chaque participant détient un journal local qui contient l’état des transactions

-3-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

• Panne du coordinateur avant la réception des messages prêt :

P1 Coordinateur P2
Prépare Prépare

Prêt Prêt Panne

Reprise
Prépare Prépare

Prêt Prêt

Valider Valider

Fin Fin

Inconvénient du protocole 2PC : En cas de panne du coordinateur, les participants qui se sont
déclarés prêts restent bloqués en attente de la reprise du participant.

III-5- Introduction à la concurrence d’accès :


La concurrence d’accès complique la gestion des transactions.
Nécessité d'exécuter les programmes et requêtes simultanément.

Le problème :
Garantir : - La cohérence de la base de données
- L’exécution correcte des programmes

Exemples de contextes hautement concurrentiels:


- annuaires téléphoniques (accès en lecture)
- systèmes de réservation de billets (lecture et mise à jour)
En considérant que l’exécution de plusieurs transactions en série est correcte, l’idée est de
ramener une exécution concurrente à une exécution en série.

A =25
T1 T2
t1 R (A)
t2 A :=A+100
t3 W(A)
t4 R (A)
t5 A:=A*2
t6 W(A)
T1 puis T2 : A = 250
Problèmes à éviter:
- Perte de mise à jour
- Ligne fantôme
- Lectures impropres (sales)
- Lectures non reproductibles

-4-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

III-5-1- Perte de mise à jour :


A =1000 A=1000
T1 T2 T1 T2
t1 R(A) R(A)
t2 A :=A+3000 R(A)
t3 W (A) A :=A+3000
t4 R(A) W (A)
t5 A :=A+500 A :=A+500
t6 W(A) W(A)
A= 4500 Mise à jour faite par T1
perdue : A = 1500

III-5-2- Ligne fantôme :


Il ∃ L1 L2 et dans ces lignes Il ∃ L1 L2 et dans ces lignes
A1=5, A2=10, S=0 A1=5, A2=10, S=0
T1 T2 T1 T2
t1 S=S+A1 S=S+A1
t2 S=S+A2 Insert A3=30
t3 S=15 Delete L2
t4 S=S+A2
t5 Insert A3=30 S=35
t6 Delete L2
t7 S=15 L2 est ligne fantôme

III-5-3-Lecture impropre:
A =1000 A =1000
T1 T2 T1 T2
t1 R(A) R(A)
t2 A :=A+3000 A :=A+3000
t3 W (A) W (A)
t4 Rollback R(A)
t5 A=1000 Rollback
t6 R(A) A=1000
t7 A :=A+500 A :=A+500
t8 W(A) W(A)
A= 1500 3000 unités de trop

-5-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

III-5-4-Lecture non reproductible:

A =1000 A =1000
T1 T2 T1 T2
t1 R(A) R(A)
t2 … R(A)
t3 R(A) A :=A+500
t4 A :=A+3000 Commit
t5 W (A) A=1500
t6 R(A) R(A)
t7 A :=A+500 A :=A+3000
t8 W(A) Commit
A= 4500 A=4500 500 unités de trop

Notions d’ordonnancement :
 Ordonnancement : séquence d’actions obtenues en intercalant les actions de plusieurs
transactions tout en préservant l’ordre interne des actions de chaque transaction.
 Ordonnancement série : ordonnancement qui n’entrelace pas les actions des différentes
transactions.
 Deux ordonnancements O1 et O2 sont équivalents si leurs effets sont identiques.
 Un ordonnancement est sérialisable s’il est équivalent à un ordonnancement série.

Exemple:
Soit T1=RT1(A), RT1(B), WT1(A), WT1(B), commitT1
et T2=RT2(A), WT2(C), WT2(A), commitT2

O = RT1(A), RT2(A), RT1(B), WT1(A), WT1(B), WT2(C), WT2(A),


commitT2, commitT1

Remarque: si chaque transaction préserve la consistance de la base alors, tout


ordonnancement sérialisable de ces transactions préserve aussi la consistance de la base.

III-5-4- Approches de gestion de la concurrence :


Deux méthodes :
- Verrouillage à 2 phases
- Tri des estampilles

III-5-4-1- Verrouillage :
L’idée est simple : on bloque l’accès à une donnée dès qu’elle est lue ou écrite par une
transaction («pose de verrou») et on libère cet accès quand la transaction termine par commit
ou rollback («libération du verrou »)

Le verrou partagé (SLocks) : permet d’accorder à plusieurs transactions l’accès au même


élément si toutes en demandent l’accès dans le seul but de le lire.

Le verrou exclusif (XLocks) : Utilisé par toute transaction qui a besoin d’effectuer une
opération d’écriture sur un élément.

-6-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

Verrous exclusif : protocole PX


- Toute transaction d’accès contient implicitement une demande de verrouillage
- verrouiller(X). Toute transaction qui a besoin d’une ressource qui est
actuellement verrouillée est mise en attente (FIFO).
- L'obtention du verrou autorise lectures et mises à jour.
- Un verrou peut être relâché explicitement déverrouiller(X) à n’importe quel
moment. Au plus tard, il est relâché implicitement à la fin de la transaction.
Exemple :
T1 T2
t1 XLire(A)
t2 XLire(A)
t3 Ecrire(A) Mise en attente
t4 ¦
t5 ¦
t6 Xrelâcher(A)
Mise en attente de T2 jusqu’à ce que A relâche le verrou. Plus de perte de mise à jour.

Verrous partagés :

o Chaque transaction doit obtenir un verrou partagé S (shared) sur un granule


avant de le lire, et un verrou exclusif X (exclusive) sur un granule avant
d’effectuer une écriture dessus.
o Tous les verrous émis par une transaction sont libérés à sa terminaison.
o Si une transaction obtient un verrou X sur un granule, aucune transaction ne
peut obtenir un verrou (S ou X) sur le même granule.

Matrice de compatibilité
S X
S O N
X N N

Le schéma de verrouillage comprend 3 opérations :


- Slire(O)  S(O)
- Xécrire(O)  X(O)
- Déverrouiller(O)  D(O)

2PL : Protocole de verrouillage en deux phases


- action RT(O) autorisée que si T possède un verrou partagé sur l’objet O
- action WT(O) autorisée que si T possède un verrou exclusif sur l’objet O
- tous les verrous détenus par T sont relâchés quand T termine (par échec ou validation).

Problème posé par ces protocoles : les interblocages (deadlock)

-7-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

T1 T2
t1 X(A)
t2 X(B)
t3 X(A)
t4 X(B) Mise en attente
t5 Mise en attente ¦
t6 ¦
Graphe d’attente :
Les nœuds sont les transactions. On a un arc de Ti -->Tj si Ti attend un verrou détenu par
Tj.
On construit des graphes locaux, mais les cycles doivent être détectés sur le graphe global
(union des graphes locaux).

T1 B T2 T2 A T1

B
T1 T2
A

T1T2 : T1 veut poser verrou sur B possédé par T2.


T2 T1 :T2 veut poser verrou sur A possédé par T1.

Solution des interblocages :


Deux approches :
• Détection : lancer une procédure de détection des interblocages (cycle dans le graphe des
attentes) et les résoudre.
 Quand faire la détection ?
- lors de demandes de verrouillage
- périodiquement
- après un certain temps d’attente pour une transaction
 Comment résoudre ? Tuer une des transactions. Défaire toutes ses mises à jour
puis relancer plus tard.
- celle qui a fait le moins de mises à jour
- la plus jeune
- celle qui a le moins de ressources allouées

• Prévention : prévenir les interblocages par la méthode d’estampillage.


Affecter à chaque transaction une estampille avec l’heure de lancement.
Si une transaction demande un verrou sur un élément déjà verrouillé, la résolution dépend
de l’estampille. Deux approches possibles.
T1 a la ressource
T2 demande l’accès à la ressource

- wait-die : la plus jeune continue

IF T2 est plus vieille que T1


THEN T2 est mise en attente et laisse T1 finir (COMMIT ou ROLLBACK)
ELSE T2 est tuée (ROLLBACK)

-8-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

- Wound-die : la plus jeune est tuée


Une transaction tuée est redémarrée plus tard avec la même estampille.

III-5-4-2- Tri des Estampilles : TO (Timestamp Ordering)

Les BDD sont peu compatibles avec L’utilisation des verrous. On utilise plutôt des techniques
d’estampillage.
Estampille : identificateur unique créé par le SGBD pour repérer une transaction. En général
les valeurs d’estampille sont attribuées dans l’ordre où les transactions sont soumises au
système. Par exemple TS (Ti)= instant de début de Ti.

Principe : - Ordonner les transactions en fonction de leur estampille.


- l’ordonnancement des transactions est équivalent à l’ordre précis des estampilles
- Associer à chaque élément X de la BD deux valeurs d’estampille.

TS-L(X) : estampille de lecture de X.


la plus grande des valeurs d’estampille des transactions ayant réussi à lire X.
TS-L(X) = TS(T) T : la plus récente ayant réussi à lire X.

TS-E(X) : estampille d’écriture de X.


la plus grande des valeurs d’estampille des transactions ayant réussi à écrire X.
TS-E(X) = TS(T) T : la plus récente ayant réussi à écrire X.

*Si T demande à lire X :

if TS(T) ≥ TS-E(X) /* estampille de T plus jeune que TS-E(X)


then /*OK*/ TS-L(X) := Max(TS-L(X), TS(T))
else /*conflit*/ Tuer T et relancer T avec une nouvelle estampille

*Si T demande à écrire X :

if TS(T) ≥ TS-E(X) et TS(T) ≥ TS-L(X)


then /*OK*/ TS-E(X) := TS(T)
else /*conflit*/ Tuer T et relancer T avec une nouvelle estampille

-9-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

III-6 Isolation des transactions :


L’isolation est la propriété des transactions qui exige que chaque Ti perçoive à tout instant la
base dans un état cohérent.
En d’autres termes, une Ti en cours d’exécution ne peut pas dévoiler ses effets aux autres
transactions avant d’atteindre son point de confirmation.

Niveaux d’isolation :
Une donnée est ‘salie’ si elle a été modifiée par une transaction non confirmée.
4 propriétés que peut satisfaire une Ti.

1. T ne modifie pas des données salies par d’autres Ti.


2. T ne confirme pas ses changements avant la fin de la Ti.
3. T ne lit pas des données salies par d’autres Ti.
4. D’autres Ti ne salissent pas des données lues par T avant que T ne soit terminée.

Cohérence de niveau0 :
On dit qu’une Ti T est cohérente de niveau 0 si :
a. 1 est satisfaite : T ne modifie pas des données salies par d’autres Ti.
Cela résout le problème de perte de mise à jour.

Cohérence de niveau 1 :
On dit qu’une Ti T est cohérente de niveau 1 si :
a. 1 est satisfaite.
b. 2 est satisfaite : T ne confirme pas ses changements avant la fin de la Ti.
Ce degré fait en sorte que si une Ti est annulée, il n’est pas nécessaire de défaire explicitement
les modifications antérieures à l’annulation.

Cohérence de niveau 2 :
On dit qu’une Ti T est cohérente de niveau 2 si :
a. 1 et 2 sont satisfaites.
b. 3 est satisfaite : T ne lit pas données salies par d’autres Ti.
Cela résout les problèmes de perte de mise à jour et de lecture impropre.

Cohérence de niveau 3 :
On dit qu’une Ti T est cohérente de niveau 3 si :
a. 1, 2 et 3 sont satisfaites.
b. 4 est satisfaite : D’autres Ti ne salissent pas des données lues par T avant que T ne
soit terminée.
Cela assure que les lectures sont reproductibles.

C’est une isolation totale de la Ti. On dit que les Ti de niveau 3 sont de niveau sérialisable.
Cela veut dire que l’exécution concurrente de Ti sérialisables est équivalente à une exécution
séquentielle de ces Ti.

-10-
Bachtarzi.C Cours : bases de données avancées
Niveau : Master 1 SI

Cas d’Oracle :

 Oracle pose des verrous automatiquement afin d’assurer la cohérence des données
selon les règles suivantes : une lecture ne bloque pas une modification et une
modification ne bloque pas une lecture.

 On peut donc considérer que pendant une Ti, chaque ut utilise pour les lectures sa
propre copie de la base.

 Par défaut, Oracle autorise que plusieurs Ti modifient, ajoutent ou suppriment des
lignes dans une même table. Les changements réalisés par une Ti n’étant pas visibles
par d’autres Ti tant que la première n’est pas validée.

Niveaux d’isolation

SET TRANSACTION option ;

Où option peut être :

 READ ONLY : lecture cohérente pour toute la Ti. n’autorise pas les modifications.

 READ WRITE : lecture cohérente pour toute la Ti. Autorise les modifications.

 ISOLATION LEVEL READ COMMITED : (option par défaut) si la Ti veut modifier


des lignes qui ont été verrouillées par une autre Ti, alors elle attend que les verrous
soient levés.

 ISOLATION LEVEL SERIALIZABLE : si T1 contient une instruction A qui veut


modifier des lignes qui ont été modifiées par T2 qui n’est pas terminée lorsque T1 a
commencé, alors l’instruction A échoue.

-11-

Vous aimerez peut-être aussi