Beruflich Dokumente
Kultur Dokumente
Bibliographie
Une BD est une réservoir commun de données qui doit être partagé entre
plusieurs utilisateurs concurrents.
Lorsqu’une transaction est longue, ont peut vouloir établir des points de
sauvegardes intermédiaires de façon à pouvoir :
- valider toutes les modifications ou,
- valider une partie d’entre elles et en annuler d’autres le cas échéant.
Contrôle des transactions – savepoint
On crée un point de sauvegarde par : SAVEPOINT <nom_repere>;
Pour annuler la partie de la transaction depuis un point de repère, on
exécute : ROLLBACK TO [SAVEPOINT] <nom_repere>;
Exemple :
UPDATE TABLE T… UPDATE TABLE T…
SAVEPOINT a SAVEPOINT a
DELETE FROM TABLE DELETE FROM TABLE
SAVEPOINT b SAVEPOINT b
UPDATE TABLE T’… UPDATE TABLE T’…
COMMIT ROLLBACK TO a
L’intégrité des données d’une base est préservée par les mises à jours de
transactions si celles-ci font passer la base d’un état cohérent à un
autre état cohérent.
Cohérence : définie par les contraintes d’intégrité posées sur les objets de
la base à la création notamment.
T1 T2
Begin T
Lire A « Lire A » : Lire une donnée A de la
A := A + 10 base (select into de PL/SQL, par exemple)
Ecrire A
End T « Ecrire A » : Ecrire dans la base
(update ou insert de SQL)
« A := A + 10 » : affectation locale
Mises à jours perdues (lost update
problem)
Si A = 5 et C = 15 au début,
Begin T1 Begin T2
- Que vaut A dans la base à la
Lire A Lire C fin ?
Lire A - Que s’est il passé ?
A := A + 10 A=A+C - Quels seraient les résultats
Ecrire A des deux exécutions en série
End T1 possibles ?
Ecrire A
Supprimer C
End T2
Dans les problèmes vus jusqu’ici les exécutions ne sont pas sérialisés : les
résultats obtenus (ou observés) étaient différents des exécutions de T1
puis T2 ou de T2 puis T1.
Exemple d’exécution sérialisée
Si A = 5, B= 10, C = 15, au
Begin T1 Begin T2 début,
Lire A -Que valent A, B et C dans la
Lire C base à la fin ?
Lire A
C=C+A -Aurait-on obtenu le même
Lire B résultat en exécutant T1 puis
B := A + 10 T2 ou T2 puis T1 ?
Ecrire B
End T1 Ecrire C
Supprimer C
End T2
Propriétés ACID
Idéalement, on attend des transactions qu’elles vérifient les 4 propriétés
suivantes :
Dans ce qui suit, on suppose que l’on peut poser deux types de verrous :
• LockR A : verrou partagé sur A (avant lecture de A : select)
• LockX A : verrou exclusif sur A (avant écriture sur A: insert, update,
delete, …).
Rollback T1
Unlock A LockX A
End T2 Lire A
A=A+C
Ecrire A
Unlock A,C
End T2
Lecture non reproductible (Inconsistent
analysis problem )
Begin T1 Begin T2
Cette fois T2 attend la libération de A…
LockS A LockS C
Lire A Lire C
… …
Pas de …
modification de Attente pour
A Verrouillage de
… A
Lire A …
Unlock A LockX A
End T1 Lire A
A=A+C
Ecrire A
etc….
End T2
Verrouillage et interblocage
Un problème important peut survenir lié au verrouillage
Deux solutions :
T2 T4
T1
T3 T5
On peut vouloir poser des verrous sur des objets de taille très différentes.
On parle alors de granularité de verrouillage.
Demandé
X SIX IX S IS
Posé
X N N N N N X
SIX N N N N O
IX N N O N O
SIX
S N N N O O
IS N O O O O IX S
IS
Pose de verrous hiérarchiques
Protocole : les verrous sont posés du haut vers le bas de la hiérarchie. Ils
sont relâchés du bas vers le haut.
De plus :
• Avant de pouvoir poser un verrou S ou IS sur un objet, une
transaction doit avoir posé un verrou IS (ou supérieur) sur le nœud
parent.
• Avant de pouvoir poser un verrou X, IX ou SIX sur un objet, une
transaction doit avoir posé un verrou IX (ou supérieur) sur le nœud
parent.
• Tout verrou X (resp. S et SIX) posé sur un objet implique un
verrouillage implicite de type X (resp. de type S) de tous les enfants de
cet objet.
Pose de verrous hiérarchiques
S t1 t2 th
Pose de verrous hiérarchiques 2
Transaction T : lire le
tuple t1.
IS IS Base IX
Transaction S : Ecrire
sur le tuple tk
IS R1 S R2 IX R3
Transaction S’ : lire la
relation R2.
Incompatible avec S!
S t1 t2 th tk
X
Protocole de verrouillage à deux phases
Indépendamment de la taille (granularité) des objets verrouillés, on peut
mettre au point un protocole sur l’ordre de pose et de relâchement des
verrous qui assure la sérialisabilité.
Temps
Est spécifié :
Leur support par les SGBDs est souvent incomplet ou ne correspond pas
toujours aux recommandations de la norme….
Read N Y Y
Committed
Repeatable N N Y
Read
Serializable N N N
Reprise sur pannes
Reprise sur pannes
But : assurer la persistance des données d’une base de données en dépit
de toutes sortes de pannes.
T4
T5
temps
0 n
Au temps n, les effets des transactions T2, T3 et T5 doivent
survivre dans la base,
les effets de T1 et T6 doivent être défaits.
Résister aux pannes
• Copie de l’état de la base à intervalle régulier sur un support « sûr »,
• Tenue d’un journal notant toutes les opérations effectuées depuis la
dernière sauvegarde.
• L’identifiant de la transaction T
• L’état de la transaction
• Le type d’action effectuée (lecture, écriture, commit, rollback, point de
sauvegarde).
• L’ancienne valeur de la donnée (en cas de modification). Appelée
« image avant » : sert à défaire l’action.
• La nouvelle valeur de la donnée. Appelée « image après » : sert à
refaire l’action.
Défaire / refaire
Journal
Journal
Point de sauvegarde - Checkpoint
Pour savoir exactement ce qui doit être refait ou défait après une panne (et
limiter le nombre d’action), on utilise la technique du checkpoint.