Академический Документы
Профессиональный Документы
Культура Документы
Database systems
Fiabilit
The complete book, chapitre 17
Garcia-Molina, Ullman, Widom
Capacit du systme SGBD remdier aux erreurs Fiabilit= capacit restaurer la base de
et pannes donnes dans un tat connu comme correct
Erreurs dans les programmes dapplication aprs une erreur quelconque qui a amen la
(transactions) base de donnes dans un tat non correct.
Erreurs dans lentre des donnes Objectifs:
Erreurs denregistrement sur disques et crash matriels viter que la BD soit incohrente
Catastrophes viter que les pg donnent des rsultats faux
Problmes:
Solution: Redondance Perte ou altration du contenu de la mmoire centrale
En particulier, perte de linformation sur les transactions en
1) Copies darchive cours
2) BD rparties avec duplication (copies Solution:
multiples) Journalisation + Procdure de reprise aprs panne
7 8
Transaction = unit de programme excute sur SGBD Une transaction s'excute correctement
Dbut Transaction si:
Accs la base de donnes (lectures, critures) Atomicit (+ cohrence, isolation, durabilit)
tout ou rien
Calculs en mmoire centrale
Fin Transaction : COMMIT ou ROLLBACK Gestionnaire de la fiabilit doit s'assurer que
cette atomicit est maintenue lors de pannes.
9 10
T
Exemple A:=A*2
Exemple - suite
B:=B*2
Action de T v M.A M.B D.A D.B Que faire ?
8 8 Remettre A et B valeur initiale: 8
1) Read (A,v) 8 8 8 8 Mettre B 16
2) v := v*2 16 8 8 8
3) Write (A,v) 16 16 8 8
Comment?
4) Read (B,v) 8 16 8 8 8
5) v := v*2 16 16 8 8 8
6) Write (B,v) 16 16 16 8 8
7) Output (A) 16 16 16 16 8
BM
8) Output (B) 16 16 16 16 16 Panne
15 16
U 1) crire les mises jour <T,X,v> dans le Signifie que on doit faire dans l'ordre suivant:
journal avant de modifier la BD (valeur de X) 1) crire sur disque les enregistrements LOG
sur le disque. indiquant les lments BD changs
U 2) Ncrire le COMMIT dans le journal que aprs 2) crire sur disque les lments BD changs eux-
Checkpoint Checkpoint
A priori en cas de reprise, on devrait remonter tout le
fichier log. Checkpoint:
Mais peut tre long! 1) Ne plus accepter de nouvelles transactions
2) Attendre la fin des transactions en cours et qu'elles
Ide: stabiliser le log priodiquement
aient crit un enregistrement Commit ou Abort sur
criture dun CHECKPOINT
le LOG
3) Flush Log
4) Ecrire un enregistrement <CKPT>
5) Flush Log
6) Recommencer accepter de nouvelles transactions
27 28
Les transactions aprs le CKPT doivent tre <CKPT> T3 est la seule transaction
dfaites comme prcdemment.
<START T3> incomplte qui doit faire
<T3, E, 25>
l'objet d'une reprise
<T3, F, 30>
------ PANNE
29 30
on sait que toutes les transactions incompltes termine donc on ne fait rien
<T2, B, 10> sont situes aprs le 1er <START CKPT> trouv. <T2, B, 10> <START T3>: T3 a t compltement dfaite
<START CKPT (T1,T2)> <T3, E, 25> <START CKPT (T1,T2)> <T2, C, 15>
<T2, C, 15> on doit rcrire la valeur 25 pour E <T2, C, 15> Pas de Commit donc T2 s'est mal termine, on doit la
dfaire (rcrit C=15)
<START T3> <START T3>
<T1, D, 20> <START CKPT (T1,T2)>
<T1, D, 20> comme on a rencontr un <COMMIT T1>, T1 s'est <T1, D, 20> Les transactions incompltes sont celles rencontres entre
bien termine donc on ne fait rien la panne et le START CKPT(T1,Tn) et celles parmi T1, ,
<COMMIT T1> <COMMIT T1> Tn qui ne sont pas termines: {T1, T2, T3}
<T3, E, 25> <T2, C, 15> <T3, E, 25> Or T1 a t valide, T3 dfaite.
On doit continuer jusqu'au START de T2 (seule transaction
<COMMIT T2> comme on a rencontr un <COMMIT T2>, T2 s'est ------- PANNE qui reste n'ayant pas t entirement dfaite)
bien termine donc on ne fait rien
<END CKPT> <T2, B, 10>:
<T3, F, 30> <START CKPT (T1,T2)> on rcrit B=10
on s'arrte <START T2>:
------- PANNE
33 On s'arrte 34
37 38
Si la panne a lieu aprs <END CKPT> Si la panne a lieu aprs un < START CKPT(T1,
On sait que les valeurs crites par transactions valides , Tn)>
(Commit) avant <START CKPT(T1,..,Tn)> sont maintenant
sur disque. On ne sait pas si les valeurs crites par transactions
Les transactions parmi T1, , Tn ou ayant commenc aprs valides (Commit) avant <START CKPT(T1,..,Tn)>
le <START CKPT>, n'ont pas forcment leurs valeurs crites sont sur disque.
sur disque mme si elles ont fait Commit. On doit trouver le dernier enregistrement <END
On doit donc faire la reprise pour REDO de ces transactions:
CKPT>, trouver son <START CKPT(S1,..,Sn)> et
Si T n'a pas fait de Commit: ignorer la mise jour (elle na pas t crite
sur le disque), refaire toutes les transactions valides qui ont soit
Si T a fait un Commit: refaire la mise jour (crire la valeur v pour X) commenc aprs ce <START CKPT(S1,..,Sn)> ou
On ne doit pas regarder plus haut dans le LOG que le plus qui font partie de S1Sn
vieux <START Ti> o Ti est une de T1, , Tn ou ayant
commenc aprs le <START CKPT> 43 44
47 48
Transaction T a chang la valeur de X, l'ancienne valeur tait 4) WRITE (A,v) 16 16 8 8 < T, A, 8, 16 >
v, la nouvelle valeur w 5) READ (B,v) 8 16 8 8 8
6) v := v*2 16 16 8 8 8
Rgle d'criture dans le fichier LOG 7) WRITE (B,v) 16 16 16 8 8 < T, B, 8, 16 >
UR1) Avant de modifier un lment X de la BD sur le disque, il 8) Flush Log
< Commit T >
est ncessaire qu'un enregistrement de mise jour <T, X, < Commit T >
9) Output (A) 16 16 16 16 8
v,w> soit crit sur le disque.
10) < Commit T >
<COMMIT T> peut tre avant ou aprs l'criture sur disque de X 11) Output (B) 16 16 16 16 16
< Commit T >
49 50
55 56
LOG
Mthode de cration d'une archive:
<START DUMP>
1) crire un enregistrement <START DUMP> sur le
<START CKPT (T1, T2)>
LOG
<T1, A, 1, 5>
2) Faire un checkpoint adapt la mthode de
journalisation utilise (UNDO/REDO ou REDO) <T2, C, 3, 6>
<COMMIT T2>
3) Faire une copie (full dump ou incremental dump)
<T1, B, 2, 7>
4) S'assurer que le fichier log partir au moins du
<COMMIT T1>
checkpoint (inclus) est sauvegard sur un disque sr
<END CKPT>
5) crire un enregistrement <END DUMP> sur le LOG
----Fin de l'archivage
<END DUMP>
59 60
61 62