gestion des transactions pour la fiabilité et la concurrence · exercice : mini-tp : transaction...

45
Gestion des transactions pour la fiabilité et la concurrence Stéphane Crozat stph.scenari-community.org/bdd tra1.pdf 29 janvier 2018 Paternité - Partage des Conditions Initiales à l'Identique : http://creativecommons.org /licenses/by-sa/4.0/fr/

Upload: trankien

Post on 11-Sep-2018

217 views

Category:

Documents


0 download

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