gestion des transactions pour la fiabilité et la concurrence · exercice : mini-tp : transaction...
TRANSCRIPT
-
Gestion des transactions pour la
fiabilit et la concurrence
Stphane Crozat
stph.scenari-community.org/bddtra1.pdf
29 janvier 2018Paternit - Partage des Conditions Initiales l'Identique : http://creativecommons.org/licenses/by-sa/4.0/fr/
-
Table des matires
I - Cours 4
1. Principes des transactions ............................................................................................................................... 4
1.1. Problmatique des pannes et de la concurrence ............................................................................................................................ 41.2. Notion de transaction ................................................................................................................................................................... 41.3. Droulement d'une transaction ..................................................................................................................................................... 51.4. Proprits ACID d'une transaction ............................................................................................................................................... 51.5. Journal des transactions ............................................................................................................................................................... 6
2. Manipulation de transactions en SQL ............................................................................................................. 6
2.1. Transactions en SQL .................................................................................................................................................................... 62.2. Exercice: Mini-TP: Transaction en SQL standard sous PostgreSQL ............................................................................................ 72.3. Exemple: Transaction sous Oracle en SQL .................................................................................................................................. 72.4. Exemple: Transaction sous Oracle en PL/SQL ............................................................................................................................. 72.5. Exemple: Transaction sous Access en VBA .................................................................................................................................. 82.6. Mode Autocommit ........................................................................................................................................................................ 82.7. Exercice ....................................................................................................................................................................................... 92.8. Exercice ....................................................................................................................................................................................... 92.9. Exercice ....................................................................................................................................................................................... 9
3. Fiabilit et transactions ................................................................................................................................. 10
3.1. Les pannes ................................................................................................................................................................................. 103.2. Point de contrle ........................................................................................................................................................................ 113.3. Ecriture en avant du journal ...................................................................................................................................................... 113.4. Reprise aprs panne ................................................................................................................................................................... 113.5. Exercice: Mini-TP: Simulation d'une panne sous PostgreSQL ................................................................................................... 123.6. Exemple: Transfert protg entre deux comptes ......................................................................................................................... 133.7. Exercice ..................................................................................................................................................................................... 143.8. Complment: Algorithme de reprise UNDO-REDO ................................................................................................................... 14
4. Concurrence et transactions .......................................................................................................................... 15
4.1. Trois problmes soulevs par la concurrence. ............................................................................................................................. 164.2. Le verrouillage ........................................................................................................................................................................... 184.3. Le dverrouillage ....................................................................................................................................................................... 194.4. Inter-blocage .............................................................................................................................................................................. 204.5. Exercice: Mini-TP: Simulation d'accs concurrents sous PostgreSQL ........................................................................................ 214.6. Solution aux trois problmes soulevs par la concurrence. .......................................................................................................... 214.7. Exercice ..................................................................................................................................................................................... 234.8. Complment: Protocole d'accs aux donnes. ............................................................................................................................ 23
5. Synthse: Les transactions ............................................................................................................................ 24
6. Bibliographie commente sur les transactions .............................................................................................. 24
II - Exercices 26
1. Exercice: Super-hros sans tte .................................................................................................................... 26
2. Exercice : Films en concurrence ................................................................................................................... 28
2.1. Exercice ..................................................................................................................................................................................... 28
-
2.2. Exercice ..................................................................................................................................................................................... 282.3. Exercice ..................................................................................................................................................................................... 282.4. Exercice ..................................................................................................................................................................................... 282.5. Exercice ..................................................................................................................................................................................... 292.6. Exercice ..................................................................................................................................................................................... 29
III - Devoir 30
1. Exercice: Opration bancaires et transactions .............................................................................................. 30
Questions de synthse 32
Solutions des exercices 35
Abrviations 42
Bibliographie 43
Webographie 44
Index 45
-
Cours
4
-
-
Les transactions sont une rponse gnrale aux problmes de fiabilit et d'accs concurrents dans les BD, et en particulier dans les BD en mode client-serveur. Elles sont le fondement de toute implmentation robuste d'une BD. Un SGBDR ne fonctionne nativement qu'en mode transactionnel.
1. Principes des transactionsObjectifs
Comprendre les principes et l'intrt des transactions
1.1. Problmatique des pannes et de la concurrence
Une est un ensemble persistant de donnes organises qui a en charge la prservation de la cohrence de BD*
ces donnes. Les donnes sont cohrentes si elles respectent l'ensemble des contraintes d'intgrit spcifies pour ces donnes : contraintes de domaine, intgrit rfrentielle, dpendances fonctionnelles...
La cohrence des donnes peut tre remise en cause par deux aspects de la vie d'une BD :
La dfaillanceLorsque le systme tombe en panne alors qu'un traitement est en cours, il y a un risque qu'une partie seulement des instructions prvues soit excute, ce qui peut conduire des incohrences. Par exemple pendant une mise jour en cascade de cls trangres suite au changement d'une cl primaire.La concurrenceLorsque deux accs concurrents se font sur les donnes, il y a un risque que l'un des deux accs rende l'autre incohrent. Par exemple si deux utilisateurs en rseau modifient une donne au mme moment, seule une des deux mises jour sera effectue.
La gestion de transactions par un est la base des mcanismes qui permettent d'assurer le maintien de SGBD*
la cohrence des BD. C'est dire encore qu'il assure que toutes les contraintes de la BD seront toujours respectes, mme en cas de panne et mme au cours d'accs concurrents.
1.2. Notion de transaction
Une transaction est une unit logique de travail, c'est dire une squence d'instructions, dont l'excution assure
le passage de la d'un tat cohrent un autre tat cohrent.BD*
CoursI
Dfinition: Transaction
-
Droulement d'une transaction
5
-
-
-
-
- -
- -
- - -
1. 2.
3.
La transaction assure le maintien de la cohrence des donnes que son excution soit ou .correcte incorrecte
L'excution d'une transaction peut tre incorrecte parce que :
Une panne a lieuUn accs concurrent pose un problmeLe programme qui l'excute en a dcid ainsi
1.3. Droulement d'une transaction
DEBUTTRAITEMENT
Accs aux donnes en lectureAccs aux donnes en criture
FIN
Correcte : Validation des modificationsIncorrecte : Annulation des modifications
Tant qu'une transaction n'a pas t termine correctement, elle doit tre assimile une ou une mise tentativejour , elle reste incertaine. Une fois termine correctement la transaction ne peut plus tre annule par virtuelleaucun moyen.
1.4. Proprits ACID d'une transaction
Une transaction doit respecter quatre proprits fondamentales :
L'atomicitLes transactions constituent l'unit logique de travail, toute la transaction est excute ou bien rien du tout, mais jamais une partie seulement de la transaction.La cohrence
Les transactions prservent la cohrence de la , c'est dire qu'elle transforme la BD d'un tat BD*
cohrent un autre (sans ncessairement que les tats intermdiaires internes de la BD au cours de l'excution de la transaction respectent cette cohrence)L'isolationLes transactions sont isoles les unes des autres, c'est dire que leur excution est indpendante des autres transactions en cours. Elles accdent donc la BD comme si elles taient seules s'excuter, avec comme corollaire que les rsultats intermdiaires d'une transaction ne sont jamais accessibles aux autres transactions.La durabilitLes transactions assurent que les modifications qu'elles induisent perdurent, mme en cas de dfaillance du systme.
Fondamental : Cohrence des excutions incorrectes
Exemple : Exemples d'excutions incorrectes
Fondamental
-
Journal des transactions
6
Les initiales de Atomicit, Cohrence, Isolation et Durabilit forme le mot mnmotechnique ACID.
1.5. Journal des transactions
Le journal est un fichier systme qui constitue un espace de stockage redondant avec la . Il rpertorie BD*
l'ensemble des mises jour faites sur la BD (en particulier les valeurs des enregistrements avant et aprs mise jour). Le journal est donc un historique (donc en mmoire secondaire) qui mmorise tout ce qui se persistantpasse sur la BD.
Le journal est indispensable pour la validation (COMMIT), l'annulation (ROLLBACK) et la reprise aprs panne de transactions.
Synonymes: Log
2. Manipulation de transactions en SQLObjectifs
Connatre les syntaxes SQL standard, PostgreSQL, Oracle et Access pour utiliser des transactions
2.1. Transactions en SQL
Le langage fournit trois instructions pour grer les transactions.SQL*
1 BEGIN TRANSACTION (ou BEGIN);
Cette syntaxe est optionnelle (voire inconnue de certains ), une transaction tant dbute de faon SGBD*
ds qu'instruction est initie sur la .implicite BD*
1 COMMIT TRANSACTION (ou COMMIT);
Cette instruction SQL signale la fin d'une transaction couronne de succs. Elle indique donc au gestionnaire de transaction que l'unit logique de travail s'est termine dans un tat cohrent est que les donnes peuvent effectivement tre modifies de faon durable.
1 ROLLBACK TRANSACTION (ou ROLLBACK);
Remarque
Dfinition: Journal
Introduction
Syntaxe : Dbut d'une transaction
Syntaxe : Fin correcte d'une transaction
Syntaxe : Fin incorrecte d'une transaction
BEGIN TRANSACTION (ou BEGIN);
COMMIT TRANSACTION (ou COMMIT);
ROLLBACK TRANSACTION (ou ROLLBACK);
-
Exercice: Mini-TP: Transaction en SQL standard sous PostgreSQL
7
1. 2.
Cette instruction SQL signale la fin d'une transaction pour laquelle quelque chose s'est mal pass. Elle indique donc au gestionnaire de transaction que l'unit logique de travail s'est termine dans un tat potentiellement incohrent et donc que les donnes ne doivent pas tre modifies en annulant les modifications ralises au cours de la transaction.
Un programme est gnralement une squence de plusieurs transactions.
2.2. Exercice: Mini-TP: Transaction en SQL standard sous PostgreSQLSe connecter une base de donnes: psql mydbCrer une table : test CREATE TABLE test (a integer);
Question 1
Question 2
2.3. Exemple: Transaction sous Oracle en SQL
1 INSERT INTO test (a) VALUES (1);2 COMMIT;3
La commande ou ne peut pas tre utilis sous Oracle (la commande BEGIN; BEGIN TRANSACTION; est rserve l'ouverture d'un bloc PL/SQL).BEGIN
Toute commande SQL LMD ( , ou ) dmarre par dfaut une transaction, la INSERT UPDATE DELETEcommande est donc implicite.BEGIN TRANSACTION
2.4. Exemple: Transaction sous Oracle en PL/SQL
1 BEGIN 2 INSERT INTO test (a) VALUES (1);3 COMMIT;
Remarque : Programme
1. 2. 3. 4.
Commencer une transaction: BEGIN TRANSACTION;Insrer les deux valeurs 1 et 2 dans la table: INSERT INTO...Valider la transaction: COMMITVrifier que les valeurs sont bien dans la table: SELECT * FROM ...
[ ]solution n1 *[ ] p.35
1. 2. 3. 4.
Commencer une transaction: BEGIN TRANSACTION;Insrer les deux valeurs 3 et 4 dans la table: INSERT INTO...Annuler la transaction: ROLLBACKVrifier que les valeurs ne sont pas dans la table: SELECT * FROM ...
[ ]solution n2 *[ ] p.35
Exemple : Exemple en SQL sous Oracle
Attention : BEGIN implicite sous Oracle
Exemple : Exemple en PL/SQL sous Oracle
INSERT INTO test (a) VALUES (1);
COMMIT;
BEGIN
INSERT INTO test (a) VALUES (1);
COMMIT;
-
Exemple: Transaction sous Access en VBA
8
- -
- -
- -
4 END;5
2.5. Exemple: Transaction sous Access en VBA
1 2 3 ( , )4 5
Sous Access, il n'est possible de dfinir des transactions sur plusieurs objets requtes qu'en VBA.
2.6. Mode Autocommit
La plupart des clients et langages d'accs aux bases de donnes proposent un mode permettant autocommitd'encapsuler chaque instruction dans une transaction. Ce mode revient avoir un implicite aprs COMMITchaque instruction.
Ce mode doit tre dsactiv pour permettre des transactions portant sur plusieurs instructions.
Sous Oracle SQL*Plus: et SET AUTOCOMMIT ON SET AUTOCOMMIT OFFSous Oracle SQL Developper : Menu Outils > Prfrences > Base de donnes > Paramtres de feuille de calcul > Validation automatique dans une
feuille de calcul
Avec psql:
\set AUTOCOMMIT on
\set AUTOCOMMIT off
Si l' est activ, il est nanmoins possible de dmarrer une transaction sur plusieurs lignes en autocommitexcutant un explicite: .BEGIN TRANSACTION BEGIN ; ... ; COMMIT ;
Ainsi deux modes sont possibles:
Autocommit activ: BEGIN explicites, COMMIT implicitesAutocommit dsactiv: BEGIN implicites, COMMIT explicites
Sous Access, toute requte portant sur plusieurs lignes d'une table est encapsule dans une transaction.
Exemple : Exemple de transfert entre deux comptes en VBA sous Access
Remarque : VBA et transactions
Attention : Autocommit
Oracle
PostgreSQL
Access
END;
Sub MyTransaction
BeginTrans
( , )CurrentDb.CreateQueryDef "" "INSERT INTO test (a) VALUES (1)" .Execute
CommitTrans
End Sub
-
Exercice
9
Ainsi par exemple la requte est excute dans une UPDATE Compte SET Solde=Solde*6,55957transaction et donc, soit toutes les lignes de la table Compte seront mises jour, soit aucune (par exemple en cas de panne pendant .
2.7. Exercice
2.8. Exercice
2.9. Exercice
Quel est le rsultat de l'excution suivante sous Oracle ?
1 SET AUTOCOMMIT OFF2 CREATE TABLE T1 (A INTEGER);34 INSERT INTO T1 VALUES (1);5 INSERT INTO T1 VALUES (2);6 INSERT INTO T1 VALUES (3);7 COMMIT;8 INSERT INTO T1 (4);9 INSERT INTO T1 (5);
10 ROLLBACK;11 SELECT SUM(A) FROM T1
[ ]solution n3 *[ ] p.35
Combien de lignes renvoie l'avant-dernire instruction SELECT ?
1 SET AUTOCOMMIT OFF2 CREATE TABLE T1 (A INTEGER);34 INSERT INTO T1 VALUES (1);5 INSERT INTO T1 VALUES (1);6 INSERT INTO T1 VALUES (1);7 SELECT * FROM T1;8 COMMIT;
[ ]solution n4 *[ ] p.36
Combien de tables sont cres par cette srie d'instruction ?
1 SET AUTOCOMMIT OFF2 CREATE TABLE T1 (A INTEGER);3 CREATE TABLE T2 (A INTEGER);4 CREATE TABLE T3 (A INTEGER);5 INSERT INTO T1 VALUES (1);6 INSERT INTO T2 VALUES (1);7 INSERT INTO T3 VALUES (1);8 ROLLBACK;
[ ]solution n5 *[ ] p.36
SET AUTOCOMMIT OFF
CREATE TABLE T1 (A INTEGER);
INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (2);
INSERT INTO T1 VALUES (3);
COMMIT;
INSERT INTO T1 (4);
INSERT INTO T1 (5);
ROLLBACK;
SELECT SUM(A) FROM T1
SET AUTOCOMMIT OFF
CREATE TABLE T1 (A INTEGER);
INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (1);
SELECT * FROM T1;
COMMIT;
SET AUTOCOMMIT OFF
CREATE TABLE T1 (A INTEGER);
CREATE TABLE T2 (A INTEGER);
CREATE TABLE T3 (A INTEGER);
INSERT INTO T1 VALUES (1);
INSERT INTO T2 VALUES (1);
INSERT INTO T3 VALUES (1);
ROLLBACK;
-
Les pannes
10
-
-
3. Fiabilit et transactionsObjectifs
Apprhender la gestion des pannes dans les SGBD.
Comprendre la rponse apporte par la gestion des transactions.
3.1. Les pannes
Une est parfois soumise des dfaillances qui entranent une perturbation, voire un arrt, de son BD*
fonctionnement.
On peut distinguer deux types de dfaillances :
Les dfaillances systmeou dfaillances douces ( ), par exemple une coupure de courant ou une panne rseau. Ces soft crashdfaillances affectent toutes les transactions en cours de traitement, mais pas la BD au sens de son espace de stockage physique.Les dfaillances des supportsou dfaillances dures ( ), typiquement le disque dur sur lequel est stocke la BD. Ces hard crashdfaillances affectent galement les transactions en cours (par rupture des accs aux enregistrements de la BD), mais galement les donnes elles-mmes.
Lorsque le systme redmarre aprs une dfaillance, toutes les transactions qui taient en cours d'excution (pas de COMMIT) au moment de la panne sont annuls (ROLLBACK impos par le systme).
Cette annulation assure le retour un tat cohrent, en vertu des proprits des transactions.ACID*
Au moment de la panne certaines transactions taient peut-tre termines avec succs (COMMIT) mais non encore (ou seulement partiellement) enregistres dans la BD (en mmoire volatile, tampon, etc.). Lorsque le systme redmarre il doit commencer par rejouer ces transactions, qui assurent un tat cohrent de la BD plus avanc.
Cette reprise des transactions aprs COMMIT est indispensable dans la mesure o c'est bien l'instruction COMMIT qui assure la fin de la transaction et donc la . Sans cette gestion, toute transaction pourrait durabilittre remise en cause.
Les transactions sont des units de travail, et donc galement de reprise.
Tandis que la gestion de transactions et de journal permet de grer les dfaillances systmes, les dfaillances des supports ne pourront pas toujours tre grs par ces seuls mcanismes.
Remarque : Annulation des transactions non termines
Remarque : R-excution des transactions termines avec succs
Remarque : Unit de reprise
Remarque : Dfaillance des supports
-
Point de contrle
11
Il faudra leur adjoindre des procdures de et de restauration de la BD pour tre capable au pire de sauvegarderevenir dans un tat antrieur cohrent et au mieux de rparer compltement la BD (cas de la rplication en temps rel par exemple).
3.2. Point de contrle
Un point de contrle est une criture dans le journal positionne automatiquement par le systme qui tablit la liste de toutes les transactions en cours (au moment o le point de contrle est pos) et force la sauvegarde des donnes alors en mmoire centrale dans la mmoire secondaire.
Le point de contrle est positionn intervalles de temps ou de nombre d'entres.
Le dernier point de contrle est le point de dpart d'une reprise aprs panne, dans la mesure o c'est le dernier instant o toutes les donnes ont t sauvegardes en mmoire non volatile.
Synonymes: Syncpoint
3.3. Ecriture en avant du journal
On remarquera que pour que la reprise de panne soit en mesure de rejouer les transactions, la premire action que doit effectuer le systme au moment du COMMIT est l'criture dans le journal de cette fin correcte de transaction. En effet ainsi la transaction pourra tre rejoue, mme si elle n'a pas eu le temps de mettre effectivement jour les donnes dans la BD, puisque le journal est en mmoire secondaire.
3.4. Reprise aprs panne
Le mcanisme de reprise aprs panne s'appuie sur le journal et en particulier sur l'tat des transactions au moment de la panne et sur le dernier point de contrle.
Le schma ci-aprs illustre les cinq cas de figure possibles pour une transaction au moment de la panne.
Dfinition: Point de contrle
Fondamental
Introduction
-
Exercice: Mini-TP: Simulation d'une panne sous PostgreSQL
12
-
-
-
-
-
1. 2.
tats d'une transaction au moment d'une panne
Transactions de type T1Elles ont dbut et se sont termines avant tc. Elles n'interviennent pas dans le processus de reprise.Transactions de type T2Elles ont dbut avant tc et se sont termines entre tc et tf. Elles devront tre rejoues (il n'est pas sr que les donnes qu'elles manipulaient aient t correctement inscrites en mmoire centrale, puisque aprs tc, or le COMMIT impose la durabilit).Transactions de type T3Elles ont dbut avant tc, mais n'tait pas termines tf. Elles devront tre annules (pas de COMMIT).Transactions de type T4Elles ont dbut aprs tc et se sont termines avant tf. Elles devront tre rejoues.Transactions de type T5Elles ont dbut aprs tc et ne se sont pas termines. Elles devront tre annules.
Les transactions sont des units d'intgrit.
3.5. Exercice: Mini-TP: Simulation d'une panne sous PostgreSQLSe connecter une base de donnes: psql mydbCrer une table : test CREATE TABLE test (a integer);
Remarque
-
Exemple: Transfert protg entre deux comptes
13
Question
3.6. Exemple: Transfert protg entre deux comptes
1 ;2 Compte1 Solde=Solde+ Num= ;3 Compte2 Solde=Solde- Num= ;4 COMMIT;5 /
1 myTransfC1C2234 Compte1 Solde=Solde+ Num= ;5 Compte2 Solde=Solde- Num= ;6 ;7 ;8 /
1 2 3 ( , )Execute
4 ( , )Execute
5 6
Pour les trois exemples ci-avant le transfert est protg au sens o soit les deux seront excuts , soit UPDATEaucun.
En cas de panne pendant la transaction, le transfert sera annul ( systme), mais en aucun cas un ROLLBACKdes deux comptes ne pourra tre modifi sans que l'autre le soit (ce qui aurait entran une perte ou un gain sur la somme des deux comptes).
1. 2. 3. 4. 5.
Commencer une transaction: BEGIN TRANSACTION;Insrer les deux valeurs 1 et 2 dans la table: INSERT INTO...Vrifier que les valeurs sont bien dans la table: SELECT * FROM ...Simuler un crash en fermant le terminal : du systmeROLLBACKSe reconnecter et vrifier que les valeurs dans la table: ne sont plus SELECT * FROM ...
[ ]solution n6 *[ ] p.36
Exemple : Transfert entre deux comptes en SQL standard sous PostgreSQL
Exemple : Transfert entre deux comptes en PL/SQL sous Oracle
Exemple : Transfert entre deux comptes en VBA sous Access
Fondamental : Transfert protg
;BEGIN
Compte1 Solde=Solde+ Num= ;UPDATE SET 100 WHERE 1
Compte2 Solde=Solde- Num= ;UPDATE SET 100 WHERE 1
COMMIT;
/
myTransfC1C2CREATE OR REPLACE PROCEDURE
IS
BEGIN
Compte1 Solde=Solde+ Num= ;UPDATE SET 100 WHERE 1
Compte2 Solde=Solde- Num= ;UPDATE SET 100 WHERE 1
;COMMIT
;END
/
Sub myTransfC1C2
BeginTrans
( , )CurrentDb.CreateQueryDef "" "UPDATE Compte1 SET Solde=Solde+100 WHERE Num=1" .
Execute ( , )CurrentDb.CreateQueryDef "" "UPDATE Compte2 SET Solde=Solde-100 WHERE Num=1" .
ExecuteCommitTrans
End Sub
-
Complment: Algorithme de reprise UNDO-REDO
14
3.7. Exercice
3.8. Complment: Algorithme de reprise UNDO-REDO
L'algorithme suivant permet d'assurer une reprise aprs panne qui annule et rejoue les transactions adquates.
1 1. SOIT deux listes REDO et UNDO2 1a. Initialiser la liste REDO vide3 1b. Initialiser la liste UNDO avec toutes les transactions en cours au dernier point de contrle
45 2. FAIRE une recherche en avant dans le journal, partir du point de contrle6 2a. SI une transaction T est commence ALORS ajouter T UNDO7 2b. SI une transaction T est termine avec succs alors dplacer T de UNDO REDO
89 3. QUAND la fin du journal est atteinte
10 3a. Annuler les transactions de la liste UNDO (reprise en arrire)11 3b. Rejouer les transactions de la liste REDO (reprise en avant)1213 4. TERMINER la reprise et redevenir disponible pour de nouvelles instructions
Pour faire un transfert scuris d'un point de vue transactionnel de 100 du compte bancaire C1 vers le compte bancaire C2 pour le compte numro 12, quelle est la srie d'instructions correcte (en mode )?autocommit off
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12;ROLLBACK;
UPDATE C2 SET Solde=Solde+100 WHERE Numero=12;COMMIT;
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12
UPDATE C2 SET Solde=Solde+100 WHERE Numero=12ROLLBACK;
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12;COMMIT;
UPDATE C2 SET Solde=Solde+100 WHERE Numero=12;COMMIT;
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12;
UPDATE C2 SET Solde=Solde+100 WHERE Numero=12;COMMIT;
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12;ROLLBACK;
UPDATE C2 SET Solde=Solde-100 WHERE Numero=12;ROLLBACK;
[ ]solution n7 *[ ] p.37
Introduction
1. SOIT deux listes REDO et UNDO
1a. Initialiser la liste REDO vide
1b. Initialiser la liste UNDO avec toutes les transactions en cours au dernier
point de contrle
2. FAIRE une recherche en avant dans le journal, partir du point de contrle
2a. SI une transaction T est commence ALORS ajouter T UNDO
2b. SI une transaction T est termine avec succs alors dplacer T de UNDO
REDO
3. QUAND la fin du journal est atteinte
3a. Annuler les transactions de la liste UNDO (reprise en arrire)
3b. Rejouer les transactions de la liste REDO (reprise en avant)
4. TERMINER la reprise et redevenir disponible pour de nouvelles instructions
-
Concurrence et transactions
15
-
-
-
-
-
tats d'une transaction au moment d'une panne
Transactions de type T1Non prises en compte par l'algorithme.Transactions de type T2Ajoutes la liste UNDO (tape 1b) puis dplace vers REDO (tape 2b) puis rejoue (tape 3b).Transactions de type T3Ajoutes la liste UNDO (tape 1b) puis annule (tape 3a).Transactions de type T4Ajoutes la liste UNDO (tape 2a) puis dplace vers REDO (tape 2b) puis rejoue (tape 3b).Transactions de type T5Ajoutes la liste UNDO (tape 2a) puis annule (tape 3a).
**
*
On voit que la gestion transactionnelle est un appui important la reprise sur panne, en ce qu'elle assure des tats cohrents qui peuvent tre restaurs.
4. Concurrence et transactionsObjectifs
Apprhender la gestion de la concurrence dans les SGBD.
Exemple
-
Trois problmes soulevs par la concurrence.
16
Comprendre la rponse apporte par la gestion des transactions.
4.1. Trois problmes soulevs par la concurrence.
Nous proposons ci-dessous trois problmes poss par les accs concurrents des transactions aux donnes.
4.1.1. Perte de mise jour
Problme de la perte de mise jour du tuple T par la transaction A
Les transaction A et B accdent au mme tuple T ayant la mme valeur respectivement t1 et t2. Ils modifient chacun la valeur de T. Les modifications effectues par A seront perdues puisqu'elle avait lu T avant sa modification par B.
Doucle crdit d'un compte bancaire C
Dans cet exemple le compte bancaire vaut 1010 la fin des deux transactions la place de 1110.
Introduction
Exemple
-
17
4.1.2. Accs des donnes non valides
Problme de la lecture impropre du tuple T par la transaction A
La transaction A accde au tuple T qui a t modifi par la transaction B. B annule sa modification et A a donc accd une valeur qui n'aurait jamais d exister (virtuelle) de T. Pire A pourrait faire une mise jour de T
l'annulation par B, cette mise jour inclurait la valeur annulation par B (et donc reviendrait aprs avantannuler l'annulation de B).
Annulation de crdit sur le compte bancaire C
Dans cet exemple le compte bancaire vaut 1110 la fin des deux transactions la place de 1010.
4.1.3. Lecture incohrente
Problme de la lecture non reproductible du tuple T par la transaction A
Exemple
-
Le verrouillage
18
Si au cours d'une mme transaction A accde deux fois la valeur d'un tuple alors que ce dernier est, entre les deux, modifi par une autre transaction B, alors la lecture de A est inconsistente. Ceci peut entraner des incohrences par exemple si un calcul est en train d'tre fait sur des valeurs par ailleurs en train d'tre mises jour par d'autres transactions.
Le problme se pose bien que la transaction B ait t valide, il ne s'agit donc pas du problme d'accs des donnes non valides.
Transfert du compte C1 au compte C2 pendant une opration de calcul C1+C2
Dans cet exemple la somme calcule vaut 210 la fin du calcul alors qu'elle devrait valoir 200.
4.2. Le verrouillage
Une solution gnrale la gestion de la concurrence est une technique trs simple appele verrouillage.
Poser un verrou sur un objet (typiquement un tuple) par une transaction signifie rendre cet objet inaccessible aux autres transactions.
Synonymes: Lock
Un verrou partag, not S, est pos par une transaction lors d'un accs en sur cet objet.lecture
Remarque
Exemple
Introduction
Dfinition: Verrou
Dfinition: Verrou partag S
-
Le dverrouillage
19
1. 2. 3.
1. 2.
Un verrou partag interdit aux autres transaction de poser un verrou exclusif sur cet objet et donc d'y accder en criture.
Synonymes: Verrou de lecture, Shared lock, Read lock
Un verrou exclusif, not X, est pos par une transaction lors d'un accs en sur cet objet.criture
Un verrou exclusif interdit aux autres transactions de poser tout autre verrou (partag ou exclusif) sur cet objet et donc d'y accder (ni en lecture, ni en criture).
Synonymes: Verrou d'criture, Exclusive lock, Write lock
Un mme objet peut tre verrouill de faon partage par plusieurs transactions en mme temps. Il sera impossible de poser un verrou exclusif sur cet objet tant transaction disposera d'un verrou S sur qu'au moins unecet objet.
Soit la transaction A voulant poser un verrou S sur un objet O
Si O n'est pas verrouill alors A peut poser un verrou SSi O dispose dj d'un ou plusieurs verrous S alors A peut poser un verrou SSi O dispose dj d'un verrou X alors A ne peut pas poser de verrou S
Soit la transaction A voulant poser un verrou X sur un objet O
Si O n'est pas verrouill alors A peut poser un verrou XSi O dispose dj d'un ou plusieurs verrous S ou d'un verrou X alors A ne peut pas poser de verrou X
Matrice des rgles de verrouillage
Une transaction qui dispose dj, , d'un verrou S sur un objet peut obtenir un verrou X sur cet objet si elle-mmeaucune autre transaction ne dtient de verrou S sur l'objet. Le verrou est alors promu du statut partag au statut exclusif.
4.3. Le dverrouillage
Lorsqu'une transaction se termine (COMMIT ou ROLLBACK) elle libre tous les verrous qu'elle a pos.
Synonymes: Unlock
Dfinition: Verrou exclusif X
Remarque : Verrous S multiples
Mthode : Rgles de verrouillage
Remarque : Promotion d'un verrou
Dfinition: Dverrouillage
-
Inter-blocage
20
4.4. Inter-blocage
L'inter-blocage est le phnomne qui apparat quand deux transactions (ou plus, mais gnralement deux) se bloquent mutuellement par des verrous poss sur les donnes. Ces verrous empchent chacune des transactions de se terminer et donc de librer les verrous qui bloquent l'autre transaction. Un processus d'attente sans fin s'enclenche alors.
Les situations d'inter-blocage sont dtectes par les et gres, en annulant l'une, l'autre ou les deux SGBD*
transactions, par un ROLLBACK systme. Les mthodes utilises sont la dtection de cycle dans un graphe d'attente et la dtection de dlai d'attente trop long.
Synonymes: , Blocage, Verrou mortelDeadlock
Principe de dtection d'un inter-blocage par dtection d'un cycle dans un graphe reprsentant quelles transactions sont en attente de quelles transactions (par infrence sur les verrous poss et les verrous causes d'attente). Un cycle est l'expression du fait qu'une transaction A est en attente d'une transaction B qui est en attente d'une transaction A.
La dtection d'un tel cycle permet de choisir une , c'est dire une des deux transactions qui sera annule victimepour que l'autre puisse se terminer.
Synonymes: Circuit de blocage
Principe de dcision qu'une transaction doit tre abandonne (ROLLBACK) lorsque son dlai d'attente est trop long.
Ce principe permet d'viter les situations d'inter-blocage, en annulant une des deux transactions en cause, et en permettant donc l'autre de se terminer.
Synonymes: Timeout
Si le dlai est trop court, il y a un risque d'annuler des transactions en situation d'attente longue, mais non bloques.
Si le dlai est trop long, il y a un risque de chute des performances en situation d'inter-blocage (le temps que le systme ragisse).
La dtection de cycle est plus adapte dans tous les cas, mais plus complexe mettre en uvre.
Une transaction ayant t annule suite un inter-blocage (dtection de cycle ou de dlai d'attente) n'a pas commis de "faute" justifiant son annulation. Cette dernire est juste due aux contraintes de la gestion de la concurrence. Aussi elle n'aurait pas d tre annule et devra donc tre excute nouveau.
Certains se charge de relancer automatiquement les transactions ainsi annules.SGBD*
Dfinition: Inter-blocage
Dfinition: Cycle dans un graphe d'attente
Dfinition: Dlai d'attente
Remarque : Risque li l'annulation sur dlai
Remarque : Relance automatique
-
Exercice: Mini-TP: Simulation d'accs concurrents sous PostgreSQL
21
- -
1.
2.
4.5. Exercice: Mini-TP: Simulation d'accs concurrents sous PostgreSQLSe connecter deux fois une mme base de donnes dans deux terminaux ( et ):term1 term2
psql mydb
psql mydb
Crer une table : test CREATE TABLE test (a integer);
Question 1
Question 2
Question 3
4.6. Solution aux trois problmes soulevs par la concurrence.
Le principe du verrouillage permet d'apporter une solution aux trois problmes classiques soulevs par les accs aux concurrents aux donnes par les transactions.
1. 2.
term1 Insrer une valeur: ( implicite)INSERT ... COMMITterm2 Vrifier que la valeur est visible: SELECT ...
[ ]solution n8 *[ ] p.37
1. 2. 3. 4. 5. 6.
term1 Commencer une transaction: BEGIN TRANSACTION;term1 Insrer la valeur 2 dans la table: INSERT INTO...term1 Vrifier que la valeur est bien dans la table: SELECT * FROM ...term2 Vrifier que la valeur : n'est pas visible SELECT * FROM ...term1 Valider la transaction: COMMIT;term2 Vrifier que la valeur : est visible SELECT * FROM ...
[ ]solution n9 *[ ] p.37
1. 2. 3. 4. 5. 6.
7.
term1 Commencer une transaction: BEGIN TRANSACTION;term1 Excuter une mise jour (multiplier toutes les valeurs par 2): UPDATE...term2 Excuter une mise jour concurrente (multiplier les valeurs par 3): UPDATE...term2 Observer la mise en attenteterm1 Valider la transaction: COMMIT;term2 Vrifier le dblocage et que les deux mises jour ont bien t effectues (a multipli par 6): SELECT...
term1 Vrifier que les deux mises jour ont bien t effectues (a multipli par 6): SELECT...
[ ]solution n10 *[ ] p.38
Introduction
-
22
4.6.1. Perte de mise jour
Problme de la perte de mise jour du tuple T par la transaction A
Le problme de perte de mise jour est rgl, mais soulve ici un autre problme, celui de .l'inter-blocage
4.6.2. Accs des donnes non valides
Problme de la lecture impropre du tuple T par la transaction A
4.6.3. Lecture incohrente
Problme de la lecture non reproductible du tuple T par la transaction A
Remarque
-
Exercice
23
1. 2. 3.
1. 2. 3.
1. 2.
La lecture reste cohrente car aucune mise jour ne peut intervenir pendant le processus de lecture d'une mme transaction.
4.7. Exercice
4.8. Complment: Protocole d'accs aux donnes.
Soit la transaction A voulant lire des donnes d'un tuple T :
A demande poser un verrou S sur TSi A obtient de poser le verrou alors A lit TSinon A attend le droit de poser son verrou (et donc que les verrous qui l'en empchent soient levs)
Soit la transaction A voulant crire des donnes d'un tuple T :
A demande poser un verrou X sur TSi A obtient de poser le verrou alors A crit TSinon A attend le droit de poser son verrou (et donc que les verrous qui l'en empchent soient levs)
Soit la transaction A se terminant (COMMIT ou ROLLBACK) :
A libre tous les verrous qu'elle avait posCertaines transactions en attente obtiennent ventuellement le droit de poser des verrous
Remarque
Soit l'excution concurrente des deux transactions ci-dessous (on pose qu'aucune autre transaction ne s'excute par ailleurs).
NB : Le tableau fait tat des temps auxquels les instructions sont soumises au serveur et non auxquels elles sont traites.
Transactions concurrentes
De combien le champ TABLE1.A a-t-il t augment t6 du point de vue de la transaction 2 ?
NB : Si vous pensez que le rsultat ne peut tre dtermin cause d'une perte de mise jour ou d'un inter-blocage, rpondez 0.
[ ]solution n11 *[ ] p.38
Mthode : Rgles de verrouillage avant les lectures et critures des donnes
-
Synthse: Les transactions
24
-
-
- - -
-
-
-
-
Afin de rationaliser les attentes des transactions, des stratgies du type sont gnralement appliques et FIFO*
donc les transactions sont empiles selon leur ordre de demande.
5. Synthse: Les transactions
Unit logique de travail pour assurer la cohrence de la BD mme en cas de pannes ou d'accs concurrents.
PanneMme en cas de panne, la BD doit rester cohrente.
Dfaillances systmeCoupure de courant, de rseau, etc.Dfaillances du supportCrash disque (dans ce cas les transactions peuvent tre insuffisantes).
ConcurrenceDimension relevant de la conception d'application.
Perte de mise jourAccs des donnes non validesLecture incohrente
ProgrammationUn programme peut dcider de l'annulation d'une transaction.
ROLLBACKInstruction SQL d'annulation d'une transaction.
6. Bibliographie commente sur les transactions
Les transactions*
Une bonne introduction courte au principe des transactions avec un exemple trs bien choisi. Des exemples d'implmentation sous divers SGBD (InterBase par exemple)
SQL2 SQL3, applications Oracle*
Une bonne description des principes des transactions, avec les exemples caractristiques, l'implmentation SQL et une tude de cas sous Oracle 8 (chapitre 5).
(Tutoriel de bases de donnes relationnelles de l'INT Evry* http://www-inf.int-evry.fr/COURS/BD/BD_REL/SUPPORT/poly.html#RTFToC30
Un aperu gnral de l'ensemble de la problmatique des transactions, de la concurrence et de la fiabilit.
Programmation SQL*
Remarque : Liste d'attente
Transaction
Complment : Synthses
http://www-inf.int-evry.fr/COURS/BD/BD_REL/SUPPORT/poly.html#RTFToC30http://www-inf.int-evry.fr/COURS/BD/BD_REL/SUPPORT/poly.html#RTFToC30
-
Bibliographie commente sur les transactions
25
Un exemple d'excution de transactions (pages 20-23)
-
Exercices
26
1. Exercice: Super-hros sans tte[10 minutes]
Les usines GARVEL construisent des figurines de super-hros partir des donnes prsentes dans la base de donnes PostgreSQL de l'entreprise. Un gros problme est survenu le mois dernier, lorsque l'usine en charge d'une nouvelle figurine, Superchild, a livr un million d'exemplaires sans tte. l'analyse de la base il a en effet t observ que la base contenait un tuple "Superchild" dans la table Personnage, et cinq tuples associs dans la table Membre, deux pour les bras, deux pour les jambes et un pour le torse, mais aucun pour la tte.
Le service qui a opr la saisie du nouveau personnage assure, sans ambigut possible, que la tte a pourtant t saisie dans la base. En revanche, l'enqute montre des instabilits de son rseau cette priode.
L'extrait du modle UML utile au problme est propos ci-aprs, ainsi que le code SQL excut via le client lors de l'insertion de la nouvelle figurine.psql
Modle UML Figurines GARVEL (extrait)
1 \set AUTOCOMMIT 2 Personnage (designation, prix, identite_secrete, genre) (
, , , );'Superchild' '12' 'Jordy' 'superhros'3 Membre (propritaire, nom, couleur) ( ,, );'bleu'
4 Membre (propritaire, nom, couleur) ( ,, );gauche' 'bleu'
5 Membre (propritaire, nom, couleur) ( ,, );gauche' 'bleu'
ExercicesII
\set AUTOCOMMIT on
Personnage (designation, prix, identite_secrete, genre) (INSERT INTO VALUES
, , , );'Superchild' '12' 'Jordy' 'superhros' Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'bras droit'
, );'bleu' Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'bras
, );gauche' 'bleu' Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'jambe
, );gauche' 'bleu'
-
Exercice : Films en concurrence
27
6 Membre (propritaire, nom, couleur) ( ,, );droite' 'bleu'
7 Membre (propritaire, nom, couleur) ( , ,);'rouge'
8 Membre (propritaire, nom, couleur) ( , ,);'rose'
Question 1
Question 2
Expliquer la nature du problme qui est probablement survenu. Proposer une solution gnrale pour que le problme ne se renouvelle pas, en expliquant pourquoi.
Soyez et : La bonne mobilisation des concepts du domaine et la clart de la rdaction seront concis prcisapprcies.
[ ]solution n12 *[ ] p.39
Illustrer la solution propose en corrigeant le code SQL de l'insertion de "Superchild".[ ]solution n13 *[ ] p.40
Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'jambe
, );droite' 'bleu' Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'torse'
);'rouge' Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'tete'
);'rose'
-
Exercice
28
2. Exercice : Films en concurrence
- -
Soit la table Film suivante dfinie en relationnel permettant d'enregistrer le nombre d'entres des films identifis par leur ISAN.
1 Film(#isan:char(33),entrees:integer)
Soit l'excution concurrente de deux transactions TR1 et TR2 visant ajouter chacune une entre au film '123':
Temps Transaction TR1 Transaction TR2
t0 BEGIN
t1 BEGIN
t2 UPDATE F i lm SET entrees=entrees+1 WHERE isan='123'
t3
t4 UPDATE F i lm SET entrees=entrees+1 WHERE isan='123'
t5
t6 COMMIT
t7
t8 COMMIT
Transaction parallles TR1 et TR2 sous PostgreSQL
NB:
Les instructions sont reportes au moment o elles sont transmises au serveurAucune autre transaction n'est en cours d'excution entre t0 et t8.
2.1. Exercice
2.2. Exercice
2.3. Exercice
[ ]solution n14 *[ ] p.41
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t3 TR1
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t3 TR2
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t5 TR1
Film(#isan:char(33),entrees:integer)
-
Exercice
29
2.4. Exercice
2.5. Exercice
2.6. Exercice
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t5 TR2
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t7 TR1
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t7 TR2
-
Devoir
30
- - - - - -
- -
1. Exercice: Opration bancaires et transactions[1 heure]
On dsire ralisation une permettant de grer les comptes bancaires des clients selon les modalits BD*
suivantes :
Chaque client possde un compte courant et ventuellement un compte d'pargne.Un compte est identifi par un numro unique compos d'un numro de pays, d'un numro de ville (relatif au pays), d'un numro d'agence (relatif la ville), et d'un numro propre (fourni par l'agence). A des fins d'identification du compte par un oprateur humain, on gardera dans la BD un intitul pour les pays, villes et agences.Il est possible de faire des transferts d'un compte sur l'autreIl est possible de dbiter (enlever) de l'argent depuis le compte courantIl est possible de crditer (ajouter) de l'argent sur les deux comptesLes comptes doivent toujours tre positifsOn ne garde pas la mmoire des oprations, seules les soldes sur les comptes sont grsUn client est dcrit par son nom, son prnom, sa civilit.
Question 1
Question 2
Suite des problmes de coupure rseaux, on constate des problmes sur les comptes. Ainsi suite l'excution des oprations prcdentes, la requte suivante renvoie des rsultats errons.
DevoirIII
Raliser la conception complte de la BD
Indice :
La conception complte signifie le MCD, le MLD et et le code SQL de cration de l'implmentation physique.
- -
- -
Soient les vnements suivants survenant sur la BD :
Le client Robert Dupont est cr dans l'agence du centre ville de Compigne, qui vient d'ouvrir.Le client Alphonse Durand est cr dans la mme agence, mais il veut galement un compte d'pargne sur lequel il dpose tout de suite 1000Le client Robert Dupont dpose deux chques de 100 sur son compte courant.Le client Alphonse Durand transfre 500 de son compte d'pargne son compte courant.
crire le code SQL permettant de traiter ces vnements, sans utiliser de transactions
-
Exercice: Opration bancaires et transactions
31
1 SELECT tCompteCourant.fkClient AS N, tCompteCourant.aSolde + COALESCE(tCompteEpargne.aSolde,0) AS SoldeDeTousComptes
2 FROM tCompteCourant LEFT JOIN TCompteEpargne 3 ON tCompteCourant.fkClient=TCompteEpargne.fkClient;
N SoldeDeTousComptes
1 100
2 500
Rsultat retourn
Question 3
Question 4
Question 5
Rcrivez le rsultat de la requte avec les valeurs qui taient attendues.
Indice :
La fonction COALESCE (x, y, z...) renvoie comme valeur le premier de ses paramtres non NULL.
Expliquer quoi peuvent tre dus les problmes rencontrs.
Proposer une solution permettant d'assurer la cohrence des oprations, en amnageant cotre code SQL.
SELECT tCompteCourant.fkClient AS N, tCompteCourant.aSolde + COALESCE
(tCompteEpargne.aSolde,0) AS SoldeDeTousComptesFROM tCompteCourant LEFT JOIN TCompteEpargne
ON tCompteCourant.fkClient=TCompteEpargne.fkClient;
-
Questions de synthse
32Stphane Crozat
Pourquoi une transaction est-elle atomique ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
Pourquoi une transaction est-elle cohrente ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
Pourquoi une transaction est-elle isole ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
Pourquoi une transaction est-elle durable ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
Questions de synthse
-
Questions de synthse
33Stphane Crozat
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
Qu'est ce qu'un point de contrle ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
A quoi sert le journal des transactions ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
Lalgorithme de reprise UNDO-REDO terminera-t-il toutes les transactions qui taient commences au moment de la panne ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
Laquelle des proprits ACID des transactions est-elle particulirement utile pour grer les accs concurrents ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
Le verrouillage est-il une solution parfaite pour la gestion de la concurrence ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
-
Questions de synthse
34Stphane Crozat
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
Pourquoi peut-on dire que les transactions sont des unit logique de travail, des units d'intgrit, des units de reprise et des units de concurrence ?
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
.........................................................................................................................................................................................................................................................
-
Solutions des exercices
35Stphane Crozat
Exercice p. 9> Solution n3
Exercice p. 7> Solution n2
Exercice p. 7> Solution n1
1 TRANSACTION;2 test(a) ( );3 test(a) ( );4 COMMIT;5 * test;6
1 a 2 ---3 14 2
1 TRANSACTION;2 test(a) ( );3 test(a) ( );4 ROLLBACK;5 * test;6
1 a 2 ---3 14 2
Quel est le rsultat de l'excution suivante sous Oracle ?
1 SET AUTOCOMMIT OFF2 CREATE TABLE T1 (A INTEGER);34 INSERT INTO T1 VALUES (1);5 INSERT INTO T1 VALUES (2);6 INSERT INTO T1 VALUES (3);7 COMMIT;8 INSERT INTO T1 (4);9 INSERT INTO T1 (5);
10 ROLLBACK;11 SELECT SUM(A) FROM T1
Solutions des exercices
TRANSACTION;BEGIN
test(a) ( );INSERT INTO VALUES 1
test(a) ( );INSERT INTO VALUES 2
COMMIT;
* test;SELECT FROM
a
---
1
2
TRANSACTION;BEGIN
test(a) ( );INSERT INTO VALUES 3
test(a) ( );INSERT INTO VALUES 4
ROLLBACK;
* test;SELECT FROM
a
---
1
2
SET AUTOCOMMIT OFF
CREATE TABLE T1 (A INTEGER);
INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (2);
INSERT INTO T1 VALUES (3);
COMMIT;
INSERT INTO T1 (4);
INSERT INTO T1 (5);
ROLLBACK;
SELECT SUM(A) FROM T1
-
Solutions des exercices
36Stphane Crozat
Exercice p. 13> Solution n6
Exercice p. 9> Solution n5
Exercice p. 9> Solution n4
6
Combien de lignes renvoie l'avant-dernire instruction SELECT ?
1 SET AUTOCOMMIT OFF2 CREATE TABLE T1 (A INTEGER);34 INSERT INTO T1 VALUES (1);5 INSERT INTO T1 VALUES (1);6 INSERT INTO T1 VALUES (1);7 SELECT * FROM T1;8 COMMIT;
3
Combien de tables sont cres par cette srie d'instruction ?
1 SET AUTOCOMMIT OFF2 CREATE TABLE T1 (A INTEGER);3 CREATE TABLE T2 (A INTEGER);4 CREATE TABLE T3 (A INTEGER);5 INSERT INTO T1 VALUES (1);6 INSERT INTO T2 VALUES (1);7 INSERT INTO T3 VALUES (1);8 ROLLBACK;
3
Les transactions n'affectent normalement que les instructions et non les instructions .LMD* LDD*
Notons nanmoins que certains SGBD peuvent tre paramtrs pour autoriser certaines instructions LDD tre affectes par les transactions (ce qui est un dtournement de l'usage thorique des transactions).
1 TRANSACTION;2 test(a) ( );3 test(a) ( );4 * test;567
1 a 2 ---3 14 2
12 * test;
1 a
SET AUTOCOMMIT OFF
CREATE TABLE T1 (A INTEGER);
INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (1);
SELECT * FROM T1;
COMMIT;
SET AUTOCOMMIT OFF
CREATE TABLE T1 (A INTEGER);
CREATE TABLE T2 (A INTEGER);
CREATE TABLE T3 (A INTEGER);
INSERT INTO T1 VALUES (1);
INSERT INTO T2 VALUES (1);
INSERT INTO T3 VALUES (1);
ROLLBACK;
TRANSACTION;BEGIN
test(a) ( );INSERT INTO VALUES 1
test(a) ( );INSERT INTO VALUES 2
* test;SELECT FROM
a
---
1
2
-- SIMULATION DE CRASH
* test;SELECT FROM
a
-
Solutions des exercices
37Stphane Crozat
Exercice p. 21> Solution n9
Exercice p. 21> Solution n8
Exercice p. 14> Solution n7
2 ---3 (0 rows)4
Pour faire un transfert scuris d'un point de vue transactionnel de 100 du compte bancaire C1 vers le compte bancaire C2 pour le compte numro 12, quelle est la srie d'instructions correcte (en mode )?autocommit off
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12;ROLLBACK;
UPDATE C2 SET Solde=Solde+100 WHERE Numero=12;COMMIT;
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12
UPDATE C2 SET Solde=Solde+100 WHERE Numero=12ROLLBACK;
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12;COMMIT;
UPDATE C2 SET Solde=Solde+100 WHERE Numero=12;COMMIT;
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12;
UPDATE C2 SET Solde=Solde+100 WHERE Numero=12;COMMIT;
UPDATE C1 SET Solde=Solde-100 WHERE Numero=12;ROLLBACK;
UPDATE C2 SET Solde=Solde-100 WHERE Numero=12;ROLLBACK;
Il est ncessaire que les instructions UPDATE aient lieu pour que le transfert soit correct et non l'une des deux deuxseulement, le COMMIT doit donc tre plac aprs les deux instructions.
12 test(a) ( );
12 * test;
1 a 2 ---3 1
12 TRANSACTION;3 test(a) ( );4 * test;5
---
(0 rows)
-- term1
test(a) ( );INSERT INTO VALUES 1
-- term2
* test;SELECT FROM
a
---
1
-- term1
TRANSACTION;BEGIN
test(a) ( );INSERT INTO VALUES 2
* test;SELECT FROM
-
Solutions des exercices
38Stphane Crozat
Exercice p. 21> Solution n10
1 a 2 ---3 14 2
12 * test;
1 a 2 ---3 1
12 COMMIT;3
12 * test;
1 a 2 ---3 14 2
12 TRANSACTION;3 test a=a* ;4
12 test a=a* ;3
12 COMMIT;
12 * test;
1 a 2 ----3 64 12
12 * test;
1 a 2 ----3 64 12
a
---
1
2
-- term2
* test;SELECT FROM
a
---
1
-- term1
COMMIT;
-- term2
* test;SELECT FROM
a
---
1
2
-- term1
TRANSACTION;BEGIN
test a=a* ;UPDATE SET 2
-- term2
test a=a* ;UPDATE SET 3
-- attente...
-- term1
COMMIT;
-- term2
* test;SELECT FROM
a
----
6
12
-- term1
* test;SELECT FROM
a
----
6
12
-
Solutions des exercices
39Stphane Crozat
Exercice p. 27> Solution n12
Exercice p. 23> Solution n11
1.
2.
Soit l'excution concurrente des deux transactions ci-dessous (on pose qu'aucune autre transaction ne s'excute par ailleurs).
NB : Le tableau fait tat des temps auxquels les instructions sont soumises au serveur et non auxquels elles sont traites.
Transactions concurrentes
De combien le champ TABLE1.A a-t-il t augment t6 du point de vue de la transaction 2 ?
NB : Si vous pensez que le rsultat ne peut tre dtermin cause d'une perte de mise jour ou d'un inter-blocage, rpondez 0.
3
La transaction 1 obtient un verrou X t2 et excute donc sans problme ses deux UPDATE.
La transaction 2 est mise en attente avant son UPDATE t3, car elle ne peut obtenir de verrou X dj pos par la transaction 1. Mais ds que la transaction 1 excute son COMMIT t5, la transaction 1 obtient de poser un verrou X (libr par la transaction 1) et peut donc excuter son UPDATE. A t6 la transaction 2 voit donc que A a t augment de 3, puisque les trois transactions UPDATE ont t excutes.
Notons nanmoins que la transaction 2 n'a pas encore fait de COMMIT, et donc que potentiellement un ajout de 1 sur A pourrait tre annul plus tard par un ROLLBACK de la transaction 2. Donc une augmentation de 2 est dfinitivement acquise et une augmentation de 1 supplmentaire est acquise pour le moment, mais pourra tre remise en cause.
Le script est en mode ce qui signifie que chaque instruction est isole dans une AUTOCOMMITtransaction propre, un implicite tant excut aprs chaque INSERT (voir ci-aprs).COMMIT
Explication
-
Solutions des exercices
40Stphane Crozat
Exercice p. 27> Solution n13
2. Une (probablement une coupure rseau) est survenue juste avant le dernier INSERT, dfaillance systmece qui a empch son excution. Les six premiers INSERT ont donc t excuts, mais pas le septime (celui qui concerne la tte).
1 Personnage (designation, prix, identite_secrete, genre) (, , , );'Superchild' '12' 'Jordy' 'superhros'
2 COMMIT;3 Membre (propritaire, nom, couleur) ( , ,);
4 COMMIT;5 Membre (propritaire, nom, couleur) ( , ,
);'bleu'6 COMMIT;7 Membre (propritaire, nom, couleur) ( ,, );'bleu'
8 COMMIT;9 Membre (propritaire, nom, couleur) ( , ,
);'rouge'10 COMMIT;11 Membre (propritaire, nom, couleur) ( ,
, );gauche' 'bleu'12 COMMIT;13 Membre (propritaire, nom, couleur) ( ,
, );droite' 'bleu'14 COMMIT;
Pour grer ce problme il faut encapsuler les sept INSERT dans une unique , celle-ci en assure alors l'transaction: il ne sera plus possible une partie seulement des INSERT d'tre excute.atomicit
1 \set AUTOCOMMIT off2 Personnage (designation, prix, identite_secrete, genre) (
, , , );'Superchild' '12' 'Jordy' 'superhros'3 Membre (propritaire, nom, couleur) ( , ,);
4 Membre (propritaire, nom, couleur) ( , ,);'bleu'
5 Membre (propritaire, nom, couleur) ( ,, );'bleu'
6 Membre (propritaire, nom, couleur) ( , ,);'rouge'
7 Membre (propritaire, nom, couleur) ( ,, );gauche' 'bleu'
8 Membre (propritaire, nom, couleur) ( ,, );droite' 'bleu'
9 COMMIT;
1 TRANSACTION;2 Personnage (designation, prix, identite_secrete, genre) (
, , , );'Superchild' '12' 'Jordy' 'superhros'3 Membre (propritaire, nom, couleur) ( , ,);
4 Membre (propritaire, nom, couleur) ( , ,);'bleu'
5 Membre (propritaire, nom, couleur) ( ,, );'bleu'
AUTOCOMMIT dsactiv, BEGIN implicite
AUTOCOMMIT activ, BEGIN explicite
Personnage (designation, prix, identite_secrete, genre) (INSERT INTO VALUES
, , , );'Superchild' '12' 'Jordy' 'superhros'COMMIT;
Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'tete' 'rose'
);COMMIT;
Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'bras droit'
);'bleu'COMMIT;
Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'bras gauche'
, );'bleu'COMMIT;
Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'torse'
);'rouge'COMMIT;
Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'jambe
, );gauche' 'bleu'COMMIT;
Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'jambe
, );droite' 'bleu'COMMIT;
\set AUTOCOMMIT off
Personnage (designation, prix, identite_secrete, genre) (INSERT INTO VALUES
, , , );'Superchild' '12' 'Jordy' 'superhros' Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'tete' 'rose'
); Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'bras droit'
);'bleu' Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'bras gauche'
, );'bleu' Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'torse'
);'rouge' Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'jambe
, );gauche' 'bleu' Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'jambe
, );droite' 'bleu'COMMIT;
TRANSACTION;BEGIN
Personnage (designation, prix, identite_secrete, genre) (INSERT INTO VALUES
, , , );'Superchild' '12' 'Jordy' 'superhros' Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'tete' 'rose'
); Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'bras droit'
);'bleu' Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'bras gauche'
, );'bleu'
-
Solutions des exercices
41Stphane Crozat
- - -
Exercice p. 28> Solution n14
6 Membre (propritaire, nom, couleur) ( , ,);'rouge'
7 Membre (propritaire, nom, couleur) ( ,, );gauche' 'bleu'
8 Membre (propritaire, nom, couleur) ( ,, );droite' 'bleu'
9 COMMIT TRANSACTION;
Exercice
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t3 TR1
1
TR1 est en cours, de son point de vue isol les entres ont t augmentes de 1.
Exercice
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t3 TR2
0
TR1 n'est pas valid t3, les modifications ne sont pas encore visibles en dehors de la transaction.
Exercice
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t5 TR1
1
TR1 obtient un verrou X t2 et excute son UPDATE.TR2 est mise en attente avant son UPDATE t4, car elle ne peut obtenir de verrou X dj pos par TR1. t5 TR1 est toujours en cours dexcution, et TR2 toujours bloque, donc les entres ont t augmentes de 1 pour le moment.
Exercice
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t5 TR2
0
TR1 est en cours dexcution, et TR2 bloque, donc n'a pas t augment de son point de vue.t.a
Exercice
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t7 TR1
1
Le dbloque TR2 qui excute son , mais celui-ci n'est toujours pas visible depuis TR1.commit update
Exercice
De combien les entres du film 123 ont-t-elles t augmentes du point de vue de la transaction ?t7 TR2
2
TR2 a pu excuter son t6 ds que TR1 a libr le verrou avec son . TR1 est valid, donc la update commitmodification est visible, et du point de vue de TR2, la modification en cours de TR2 est galement visible.
Membre (propritaire, nom, couleur) ( , ,INSERT INTO VALUES 'Superchild' 'torse');'rouge'
Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'jambe
, );gauche' 'bleu' Membre (propritaire, nom, couleur) ( ,INSERT INTO VALUES 'Superchild' 'jambe
, );droite' 'bleu'COMMIT TRANSACTION;
-
Signification des abrviations
42Stphane Crozat
ACID : Atomicity, Consistency, Isolation, Durability
BD : Base de Donnes
FIFO : First In First Out
LDD : Langage de Dfinition de Donnes
LMD : Langage de Manipulation de Donnes
SGBD : Systme de Gestion de Bases de Donnes
SQL : Structured Query Language
Abrviations
-
Bibliographie
43Stphane Crozat
. . , Delmal Pierre SQL2 SQL3, applications Oracle De Boeck Universit 2001.
, . . , Mata-Toledo Ramon A. Cushman Pauline K. Programmation SQL Ediscience 2003.
Bibliographie
-
Webographie
44Stphane Crozat
, , , Cesbron-Lavau Henry Les transactions http://www.developpez.com/hcesbronlavau/Transactions.htm2002.
, , Defude Bruno Tutoriel de bases de donnes relationnelles de l'INT Evry http://www-inf.int-evry.fr/COURS, ./BD/ consult en 2009
Webographie
http://www.developpez.com/hcesbronlavau/Transactions.htmhttp://www-inf.int-evry.fr/COURS/BD/http://www-inf.int-evry.fr/COURS/BD/
-
Index
45Stphane Crozat
Accesp. 8, 13
ACIDp. 5
Annulationp. 5
Attentep. 23
Cohrencep. 4, 4, 5, 16
COMMITp. 6, 8, 11
Concurrencep. 4, 16, 21
Dfaillancep. 4
Dverrouillagep. 19
Durabilitp. 6
Ecriturep. 18
Excutionp. 4
Fiabilitp. 13
Inter-blocagep. 19, 21
Journalp. 6, 11, 11
Lecturep. 18
Oraclep. 7, 7, 13
Pannep. 6, 10, 11, 11, 14
Pertep. 16
PL/SQLp. 7, 13
Point de contrlep. 11, 11, 14
ROLLBACKp. 6, 8, 10, 19
SQLp. 6, 7, 8, 13
Transactionp. 5, 7, 7, 8, 13
Transfertp. 13
UNDO-REDOp. 14
Unitp. 4, 5, 10, 11
Validationp. 5
VBAp. 8, 13
Verroup. 18, 19, 19, 21, 23
Index
CoursPrincipes des transactionsProblmatique des pannes et de la concurrenceNotion de transactionDroulement d'une transactionProprits ACID d'une transactionJournal des transactions
Manipulation de transactions en SQLTransactions en SQLExercice: Mini-TP: Transaction en SQL standard sous PostgreSQLExemple: Transaction sous Oracle en SQLExemple: Transaction sous Oracle en PL/SQLExemple: Transaction sous Access en VBAMode AutocommitExerciceExerciceExercice
Fiabilit et transactionsLes pannesPoint de contrleEcriture en avant du journalReprise aprs panneExercice: Mini-TP: Simulation d'une panne sous PostgreSQLExemple: Transfert protg entre deux comptesExerciceComplment: Algorithme de reprise UNDO-REDO
Concurrence et transactionsTrois problmes soulevs par la concurrence.Le verrouillageLe dverrouillageInter-blocageExercice: Mini-TP: Simulation d'accs concurrents sous PostgreSQLSolution aux trois problmes soulevs par la concurrence.ExerciceComplment: Protocole d'accs aux donnes.
Synthse: Les transactionsBibliographie commente sur les transactions
ExercicesExercice: Super-hros sans tteExercice : Films en concurrenceExerciceExerciceExerciceExerciceExerciceExercice
DevoirExercice: Opration bancaires et transactions
Questions de synthseSolutions des exercicesAbrviationsBibliographieWebographieIndex