La gestion des
transactions
http://bdd.crzt.fr
STPHANE CROZAT
27 juillet 2014
Table des
matires
Introduction
Transactions en SQL..........................................................................................................9
Mini-TP : Transaction en SQL standard sous PostgreSQL.......................................................10
Exemple : Transaction sous Oracle en SQL.........................................................................10
Exemple : Transaction sous Oracle en PL/SQL.....................................................................11
Exemple : Transaction sous Access en VBA.........................................................................11
Mode Autocommit...........................................................................................................11
Exercice.........................................................................................................................12
Exercice.........................................................................................................................12
Exercice.........................................................................................................................12
C. Fiabilit et transactions................................................................................13
1.
2.
3.
4.
5.
6.
7.
8.
9.
Les pannes.....................................................................................................................13
Point de contrle.............................................................................................................14
Ecriture en avant du journal.............................................................................................14
Reprise aprs panne........................................................................................................14
Mini-TP : Simulation d'une panne sous PostgreSQL..............................................................16
Exemple : Transfert protg entre deux comptes................................................................16
Exercice.........................................................................................................................17
Super-hros sans tte......................................................................................................17
Complment : Algorithme de reprise UNDO-REDO...............................................................18
D. Concurrence et transactions.........................................................................20
1.
2.
3.
4.
5.
6.
7.
8.
9.
Stphane Crozat
II - Application : Transactions
33
35
41
43
Questions de synthse
45
49
57
61
Bibliographie
63
Webographie
65
Index
67
Stphane Crozat
Introduction
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.
Stphane Crozat
Thorie :
Transactions,
fiabilit,
concurrence
I-
10
Fiabilit et transactions
14
Concurrence et transactions
23
La dfaillance
Lorsque 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 concurrence
Lorsque 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.
Stphane Crozat
2. Notion de transaction
Dfinition : Transaction
Une transaction est une unit logique de travail, c'est dire une squence
d'instructions, dont l'excution assure le passage de la BD d'un tat cohrent un
autre tat cohrent.
Exemple
Fondamental
Tant qu'une transaction n'a pas t termine correctement, elle doit tre assimile
une tentative ou une mise jour virtuelle, elle reste incertaine. Une fois
termine correctement la transaction ne peut plus tre annule par aucun moyen.
L'atomicit
Les 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 BD, c'est dire qu'elle
transforme la BD d'un tat cohrent un autre (sans ncessairement que
les tats intermdiaires internes de la BD au cours de l'excution de la
transaction respectent cette cohrence)
Stphane Crozat
L'isolation
Les 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 durabilit
Les transactions assurent que les modifications qu'elles induisent perdurent,
mme en cas de dfaillance du systme.
Remarque
Les initiales de Atomicit, Cohrence, Isolation et Durabilit forme le mot
mnmotechnique ACID.
1. Transactions en SQL
Introduction
Le langage SQL fournit trois instructions pour grer les transactions.
Cette syntaxe est optionnelle (voire inconnue de certains SGBD), une transaction
tant dbute de faon implicite ds qu'instruction est initie sur la BD.
Stphane Crozat
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.
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.
Remarque : Programme
Un programme est gnralement une squence de plusieurs transactions.
Question 1
1.
2.
3.
4.
[Solution n1 p 49]
Commencer une transaction : BEGIN TRANSACTION;
Insrer les deux valeurs 1 et 2 dans la table : INSERT INTO...
Valider la transaction : COMMIT
Vrifier que les valeurs sont bien dans la table : SELECT * FROM ...
Question 2
1.
2.
3.
4.
[Solution n2 p 49]
Commencer une transaction : BEGIN TRANSACTION;
Insrer les deux valeurs 3 et 4 dans la table : INSERT INTO...
Annuler la transaction : ROLLBACK
Vrifier que les valeurs ne sont pas dans la table : SELECT * FROM ...
10
Stphane Crozat
Toute commande SQL LMD (INSERT, UPDATE ou DELETE) dmarre par dfaut une
transaction, la commande BEGIN TRANSACTION est donc implicite.
BEGIN
INSERT INTO test (a) VALUES (1);
COMMIT;
END;
Sub MyTransaction
BeginTrans
CurrentDb.CreateQueryDef("", "INSERT INTO test (a) VALUES
(1)").Execute
CommitTrans
End Sub
6. Mode Autocommit
Attention : Autocommit
La plupart des clients et langages d'accs aux bases de donnes proposent un
mode autocommit permettant d'encapsuler chaque instruction dans une
transaction. Ce mode revient avoir un COMMIT implicite aprs chaque instruction.
Ce mode doit tre dsactiv pour permettre des transactions portant sur plusieurs
instructions.
Oracle
Sous Oracle SQL Developper : Menu Outils > Prfrences > Base de
donnes > Paramtres de feuille de calcul > Validation
automatique dans une feuille de calcul
PostgreSQL
Avec psql :
\set AUTOCOMMIT on
11
COMMIT ;.
Ainsi deux modes sont possibles :
Access
Sous Access, toute requte portant sur plusieurs lignes d'une table est encapsule
dans une transaction.
Ainsi par exemple la requte UPDATE Compte SET Solde=Solde*6,55957 est
excute dans une transaction et donc, soit toutes les lignes de la table Compte
seront mises jour, soit aucune (par exemple en cas de panne pendant .
7. Exercice
[Solution n1 p 57]
8. Exercice
[Solution n2 p 57]
9. Exercice
[Solution n3 p 57]
12
Stphane Crozat
C. Fiabilit et transactions
Objectifs
Apprhender la gestion des pannes dans les SGBD.
Comprendre la rponse apporte par la gestion des
transactions.
1. Les pannes
Une BD est parfois soumise des dfaillances qui entranent une perturbation,
voire un arrt, de son fonctionnement.
On peut distinguer deux types de dfaillances :
13
2. Point de contrle
Dfinition : 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
14
Stphane Crozat
Transactions de type T1
Elles ont dbut et se sont termines avant tc. Elles n'interviennent pas
dans le processus de reprise.
Transactions de type T2
Elles 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 T3
Elles ont dbut avant tc, mais n'tait pas termines tf. Elles devront tre
annules (pas de COMMIT).
Transactions de type T4
Elles ont dbut aprs tc et se sont termines avant tf. Elles devront tre
rejoues.
Transactions de type T5
Elles ont dbut aprs tc et ne se sont pas termines. Elles devront tre
annules.
Remarque
Les transactions sont des units d'intgrit.
Stphane Crozat
15
Question
1.
2.
3.
4.
5.
[Solution n3 p 49]
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 : ROLLBACK du systme
Se reconnecter et vrifier que les valeurs ne sont plus dans la table :
SELECT * FROM ...
BEGIN;
UPDATE Compte1 SET Solde=Solde+100 WHERE Num=1;
UPDATE Compte2 SET Solde=Solde-100 WHERE Num=1;
COMMIT;
/
Exemple
1
2
3
4
5
6
7
8
Exemple
1
2
3
4
5
6
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").Execute
CommitTrans
End Sub
16
Stphane Crozat
7. Exercice
[Solution n4 p 57]
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)?
Stphane Crozat
17
1
2
3
4
5
6
7
8
\set AUTOCOMMIT on
INSERT INTO Personnage (designation, prix, identite_secrete, genre)
VALUES ('Superchild','12','Jordy','superhros') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','bras droit','bleu') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','bras gauche','bleu') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','jambe gauche','bleu') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','jambe droite','bleu') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','torse','rouge') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','tete','rose') ;
Question 1
[Solution n4 p 50]
18
Stphane Crozat
1
2
3
4
5
6
7
8
9
10
11
12
13
REDO et UNDO
liste REDO vide
liste UNDO avec toutes les transactions en cours
contrle
Exemple
Stphane Crozat
Transactions de type T1
Non prises en compte par l'algorithme.
Transactions de type T2
Ajoutes la liste UNDO (tape 1b) puis dplace vers REDO (tape 2b)
puis rejoue (tape 3b).
Transactions de type T3
Ajoutes la liste UNDO (tape 1b) puis annule (tape 3a).
19
Transactions de type T4
Ajoutes la liste UNDO (tape 2a) puis dplace vers REDO (tape 2b)
puis rejoue (tape 3b).
Transactions de type T5
Ajoutes la liste UNDO (tape 2a) puis annule (tape 3a).
* *
*
D. Concurrence et transactions
Objectifs
Apprhender la gestion de la concurrence dans les SGBD.
Comprendre la rponse apporte par la gestion des
transactions.
T rans ac tionA
T rans ac tionB
t1
LIRE T
t2
...
LIRE T
t3
UP DA TE T
...
t4
...
UP DA T E T
t5
CO M M IT
...
t4
CO M M IT
20
Stphane Crozat
Exemple
T em ps
t1
t2
t3
t4
t5
A :A jouter100
B :A jouter10
LIRE CO M P T E
C= 1000
...
LIRE CO M P T E
C= 1000
UP DA TE CO M P T E
C= C+ 100= 1100
...
...
UP DA T E CO M P T E
C= C+ 10= 1010
CO M M IT
C= 1100
...
CO M M IT
C= 1010
t6
T rans ac tionA
t1
t2
t3
T rans ac tionB
UP DA T E T
LIRE T
...
RO LLB A C K
Stphane Crozat
21
Exemple
T em ps
A :A jouter10
B :A jouter100(erreur)
t1
LIRE CO M P T E
C= 1000
t2
UP DA T E CO M P T E
C= C+ 100= 1100
t3
t4
LIRE CO M P T E
C= 1100
...
...
RO LLB A CK
C= 1000
t5
UP DA TE C
C= C+ 10= 1110
t6
CO M M IT
C= 1110
c) Lecture incohrente
T em ps
T rans ac tionA
T rans ac tionB
t1
LIRE T
t2
...
UP DA T E T
t3
...
CO M M IT
t4
LIRE T
Remarque
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.
22
Stphane Crozat
Exemple
T em ps
t1
B :T rans fertde10deC1 C2
LIRE CO M P T E 1
C1= 100
...
LIRE CO M P T E 1
C1= 100
...
LIRE CO M P T E 2
C2= 100
...
UP DA T E CO M P T E 1
C1= 10010= 90
...
UP DA T E CO M P T E 2
C2= 100+ 10= 110
t6
...
CO M M IT
t7
LIRE CO M P T E 2
C2= 110
t8
CA LCULS
S = C1+ C2= 210
t2
t3
t4
t5
2. Le verrouillage
Introduction
Une solution gnrale la gestion de la concurrence est une technique trs simple
appele verrouillage.
Dfinition : Verrou
Poser un verrou sur un objet (typiquement un tuple) par une transaction signifie
rendre cet objet inaccessible aux autres transactions.
Synonymes : Lock
Stphane Crozat
23
(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
Mthode
Soit la
1.
2.
3.
Soit la
1.
2.
: Rgles de verrouillage
D em anderefus e
D em anderefus e
D em andeac c orde
D em anderefus e
D em andeac c ord e
D em andeac c orde
3. Le dverrouillage
Dfinition : Dverrouillage
Lorsqu'une transaction se termine (COMMIT ou ROLLBACK) elle libre tous les
verrous qu'elle a pos.
Synonymes : Unlock
4. Inter-blocage
Dfinition : 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 SGBD et gres, en annulant
l'une, l'autre ou les deux 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.
24
Stphane Crozat
Question 1
[Solution n6 p 51]
1. term1 Insrer une valeur : INSERT ... (COMMIT implicite)
2. term2 Vrifier que la valeur est visible : SELECT ...
Stphane Crozat
25
Question 2
1.
2.
3.
4.
5.
6.
term1
term1
term1
term2
term1
term2
[Solution n7 p 51]
Commencer une transaction : BEGIN TRANSACTION;
Insrer la valeur 2 dans la table : INSERT INTO...
Vrifier que la valeur est bien dans la table : SELECT * FROM ...
Vrifier que la valeur n'est pas visible : SELECT * FROM ...
Valider la transaction : COMMIT;
Vrifier que la valeur est visible : SELECT * FROM ...
Question 3
[Solution n8 p 52]
1. term1 Commencer une transaction : BEGIN TRANSACTION;
2. term1 Excuter une mise jour (multiplier toutes les valeurs par 2) :
UPDATE...
3. term2 Excuter une mise jour concurrente (multiplier les valeurs par 3) :
UPDATE...
4. term2 Observer la mise en attente
5. term1 Valider la transaction : COMMIT;
6. term2 Vrifier le dblocage et que les deux mises jour ont bien t
effectues (a multipli par 6) : SELECT...
7. term1 Vrifier que les deux mises jour ont bien t effectues (a multipli
par 6) : SELECT...
T rans ac tionA
T rans ac tionB
LIRE T
V errouS
...
LIRE T
V errouS
t3
U P DA T E T
A ttente...
...
t4
...
A ttente...
UP DA T E T
A ttente...
...
Interbloc age
t2
Remarque
Le problme de perte de mise jour est rgl, mais soulve ici un autre problme,
celui de l'inter-blocage.
26
Stphane Crozat
T rans ac tionA
UP DA T E T
V errouX
t1
t2
LIRE T
A ttente...
...
RO LLB A C K
Librationduv errouX
t3
t4
T rans ac tionB
V errouS
c) Lecture incohrente
T em ps
t1
T rans ac tionA
T rans ac tionB
LIRE T
V errouS
...
UP DA T E T
A ttente...
t3
LIRE T
V errous S
...
...
t2
Remarque
La lecture reste cohrente car aucune mise jour ne peut intervenir pendant le
processus de lecture d'une mme transaction.
7. Exercice
[Solution n5 p 58]
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.
Stphane Crozat
27
T em ps
T rans ac tion1
t0
T rans ac tion2
B E G INT RA NS A CT IO N
t1
B E G INT RA NS A CT IO N
t2
UP DA TE T A B LE 1S E T
T A B LE 1.A = T A B LE 1.A + 1
UP DA T E T A B LE 1S E T
T A B LE 1.A = TA B LE 1.A + 1
t3
t4
UP DA TE T A B LE 1S E T
T A B LE 1.A = T A B LE 1.A + 1
t5
CO M M IT
t6
28
Film(#isan:char(33),entrees:integer)
Stphane Crozat
Transaction TR1
BEGIN
t1
t2
Transaction TR2
BEGIN
t3
t4
t5
t6
COMMIT
t7
t8
COMMIT
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t3 du point de
vue de la transaction TR1 ?
Exercice
Stphane Crozat
29
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t5 du point de
vue de la transaction TR1 ?
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t5 du point de
vue de la transaction TR2 ?
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t7 du point de
vue de la transaction TR1 ?
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t7 du point de
vue de la transaction TR2 ?
30
Stphane Crozat
Stphane Crozat
31
Application :
Transactions
II -
II
37
On ne garde pas la mmoire des oprations, seules les soldes sur les
comptes sont grs
33
Application : Transactions
Le client Robert Dupont dpose deux chques de 100 sur son compte
courant.
1
2
3
SoldeDeTousComptes
100
500
Tableau 13 Rsultat retourn
Question 3
[Solution n11 p 55]
34
Stphane Crozat
Test :
Transactions
III -
III
Stphane Crozat
Film(#isan:char(33),entrees:integer)
35
Test : Transactions
Transaction TR1
BEGIN
t1
t2
Transaction TR2
BEGIN
t3
t4
t5
t6
COMMIT
t7
t8
COMMIT
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t3 du point de
vue de la transaction TR1 ?
Exercice
36
Stphane Crozat
Test : Transactions
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t5 du point de
vue de la transaction TR1 ?
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t5 du point de
vue de la transaction TR2 ?
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t7 du point de
vue de la transaction TR1 ?
Exercice
De combien les entres du film 123 ont-t-elles t augmentes t7 du point de
vue de la transaction TR2 ?
Exercice 2
[Solution n1 p 57]
Stphane Crozat
37
Test : Transactions
Exercice 3
[Solution n2 p 57]
Exercice 4
[Solution n3 p 57]
Exercice 5
[Solution n4 p 57]
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)?
38
Stphane Crozat
Test : Transactions
Exercice 6
[Solution n5 p 58]
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.
T em ps
T rans ac tion1
t0
t1
B E G INTRA NS A CT IO N
t2
UP DA TE T A B LE 1S E T
T A B LE 1.A = T A B LE 1.A + 1
UP DA T E T A B LE 1S E T
T A B LE 1.A = T A B LE 1.A + 1
t3
t4
UP DA TE T A B LE 1S E T
T A B LE 1.A = T A B LE 1.A + 1
t5
CO M M IT
t6
T rans ac tion2
B E G INT RA NS A CT IO N
Stphane Crozat
39
Test : Transactions
Exercice 7
[Solution n7 p 59]
Quelle valeur renvoie le code suivant sous Oracle ? (notez ERREUR si le code
renvoie une erreur).
1
2
3
4
5
6
7
8
40
Stphane Crozat
Synthse : Les
transactions
IV -
IV
Transaction
Unit logique de travail pour assurer la cohrence de la BD mme en cas de pannes
ou d'accs concurrents.
Panne
Mme en cas de panne, la BD doit rester cohrente.
Dfaillances systme
Coupure de courant, de rseau, etc.
Dfaillances du support
Crash disque (dans ce cas les transactions peuvent tre insuffisantes).
Concurrence
Dimension relevant de la conception d'application.
Perte de mise jour
Accs des donnes non valides
Lecture incohrente
Programmation
Un programme peut dcider de l'annulation d'une transaction.
ROLLBACK
Instruction SQL d'annulation d'une transaction.
Stphane Crozat
41
Bibliographie
commente sur
les transactions
V-
Stphane Crozat
43
Complment
: Synthses
44
Stphane Crozat
Questions de
synthse
Pourquoi une transaction est-elle atomique ?
Stphane Crozat
45
Questions de synthse
46
Stphane Crozat
Questions de synthse
Laquelle des proprits ACID des transactions est-elle particulirement utile pour grer les
accs concurrents ?
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 ?
Stphane Crozat
47
Solution des
exercices
> Solution n1 (exercice p. 10)
1
2
3
4
5
6
BEGIN TRANSACTION;
INSERT INTO test(a) VALUES (1);
INSERT INTO test(a) VALUES (2);
COMMIT;
SELECT * FROM test;
1
2
3
4
a
--1
2
BEGIN TRANSACTION;
INSERT INTO test(a) VALUES (1);
INSERT INTO test(a) VALUES (2);
ROLLBACK;
SELECT * FROM test;
1
2
3
4
a
--1
2
Stphane Crozat
1
2
3
4
5
6
7
BEGIN TRANSACTION;
INSERT INTO test(a) VALUES (1);
INSERT INTO test(a) VALUES (2);
SELECT * FROM test;
1
2
3
a
--1
49
1
2
-- SIMULATION DE CRASH
SELECT * FROM test;
1
2
3
4
a
--(0 rows)
50
Stphane Crozat
BEGIN TRANSACTION ;
INSERT INTO Personnage (designation, prix, identite_secrete, genre)
VALUES ('Superchild','12','Jordy','superhros') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','tete','rose') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','bras droit','bleu') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','bras gauche','bleu') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','torse','rouge') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','jambe gauche','bleu') ;
INSERT INTO Membre (propritaire, nom, couleur) VALUES
('Superchild','jambe droite','bleu') ;
COMMIT TRANSACTION ;
-- term1
INSERT INTO test(a) VALUES (1);
1
2
-- term2
SELECT * FROM test;
1
2
3
a
--1
Stphane Crozat
1
2
3
4
5
-- term1
BEGIN TRANSACTION;
INSERT INTO test(a) VALUES (2);
SELECT * FROM test;
1
2
3
4
a
--1
2
1
2
-- term2
SELECT * FROM test;
1
2
3
a
--1
-- term1
51
COMMIT;
1
2
-- term2
SELECT * FROM test;
1
2
3
4
a
--1
2
-- term1
BEGIN TRANSACTION;
UPDATE test SET a=a*2;
1
2
3
-- term2
UPDATE test SET a=a*3;
-- attente...
1
2
-- term1
COMMIT;
1
2
-- term2
SELECT * FROM test;
1
2
3
4
a
---6
12
1
2
-- term1
SELECT * FROM test;
1
2
3
4
a
---6
12
52
Stphane Crozat
1
2
3
4
5
6
7
8
9
10
11
12
13
Remarque
L'ajout des cls trangres dans la cl primaire en cascade (pour ville, agence et
compte) est directement li au fait que les entits Ville, Agence et Compte sont des
entits faibles (ou composition en UML), respectivement par rapport Pays, Ville et
Agence. L'intrt est simple, le Numro d'une ville tant relatif un pays (par
dfinition de l'entit faible), il faut pour identifier (connatre) une ville son numro
et celui de son pays. Chaque pays compte bien une seule ville n1, mais il existe
plusieurs villes n1 si l'on considre tous les pays. Idem pour Agence et Compte. La
seule alternative est de mettre des cls artificielles non relatives, mais ce n'est pas
toujours pertinent. On notera que les comptes bancaires sont effectivement
composs d'un code agence + un code ville + un code pays, etc.
1
2
3
4
5
6
7
8
9
10
11
12
Stphane Crozat
53
54
Stphane Crozat
Stphane Crozat
BEGIN TRANSACTION;
INSERT INTO TClient VALUES (1, 'Dupont', 'Robert', 'M');
INSERT INTO TPays VALUES (1, 'France');
INSERT INTO TVille VALUES (1, 1, 'Compigne');
INSERT INTO TAgence VALUES (1, 1, 1, 'Centre Ville');
INSERT INTO TCompteCourant VALUES (1, 1, 1, 1, 0, 1);
COMMIT;
-- Les cinq oprations prcdentes doivent toutes tre excutes, ou
bien aucune, car en vertu des cardinalits du MCD :
--il ne peut exister de client sans compte courant,
--il ne peut exister de pays sans ville,
--il ne peut exister de ville sans agence,
--il ne peut exister d'agence sans compte.
--La transaction assure l'unit logique de traitement de ces
oprations.
BEGIN TRANSACTION;
INSERT INTO TClient VALUES (2, 'Durand', 'Alphonse', 'M');
INSERT INTO TcompteCourant VALUES (2, 1, 1, 1, 0, 2);
INSERT INTO TcompteEpargne VALUES (1, 1, 1, 1, 0, 2);
UPDATE TcompteEpargne
SET aSolde=aSolde+1000
WHERE fkClient=2;
COMMIT;
-- Les quatre oprations prcdentes correspondent l'initialisation
du client 2, il est donc conseill qu'elles s'effectuent galement de
faon unitaire.
55
56
-- Dans tous les cas les deux premires instructions DOIVENT tre
effectues dans la mme transaction, car il ne peut exister de client
sans compte courant et inversement.
BEGIN TRANSACTION;
UPDATE TcompteCourant
SET aSolde=aSolde+100
WHERE fkClient=1;
UPDATE TcompteCourant
SET aSolde=aSolde+100
WHERE fkClient=1;
COMMIT;
-- Les deux oprations prcdentes peuvent tre regroupes dans une
mme transaction, puisque l'on s'attend bien un crdit de 200.
BEGIN TRANSACTION;
UPDATE TcompteEpargne
SET aSolde=aSolde-500
WHERE fkClient=2;
UPDATE TcompteCourant
SET aSolde=aSolde+500
WHERE fkClient=2;
COMMIT;
-- Le transfert est le cas typique o la transaction est obligatoire,
en effet, effectuer le crdit sans le dbit ou inversement serait une
erreur vis vis de la cohrence de la BD.
Stphane Crozat
Solution des
exercices
> Solution n1 (exercice p. 12,37)
6
57
Il est ncessaire que les deux instructions UPDATE aient lieu pour que le transfert
soit correct et non l'une des deux seulement, le COMMIT doit donc tre plac aprs
les deux instructions.
Exercice
0
TR1 n'est pas valid t3, les modifications ne sont pas encore visibles en dehors de
la transaction.
Exercice
1
Exercice
0
TR1 est en cours dexcution, et TR2 bloque, donc t.a n'a pas t augment de
son point de vue.
Exercice
1
Le commit dbloque TR2 qui excute son update, mais celui-ci n'est toujours pas
visible depuis TR1.
58
Stphane Crozat
Exercice
2
TR2 a pu excuter son update t6 ds que TR1 a libr le verrou avec son commit.
TR1 est valid, donc la modification est visible, et du point de vue de TR2, la
modification en cours de TR2 est galement visible.
Stphane Crozat
59
Signification des
abrviations
-
ACID
BD
FIFO
LDD
LMD
SGBD
SQL
Stphane Crozat
61
Bibliographie
[Delmal01] DELMAL PIERRE. SQL2 SQL3, applications Oracle. De Boeck Universit, 2001.
[Mata03] MATA-TOLEDO RAMON A., CUSHMAN PAULINE K.. Programmation SQL. Ediscience, 2003.
Stphane Crozat
63
Webographie
[w_developpez.com/hcesbronlavau]
CESBRON-LAVAU
HENRY,
http://www.developpez.com/hcesbronlavau/Transactions.htm , 2002.
Les
transactions,
[w_int-evry.fr] DEFUDE BRUNO, Tutoriel de bases de donnes relationnelles de l'INT Evry, http://wwwinf.int-evry.fr/COURS/BD/ , consult en 2009.
Stphane Crozat
65
Index
Acces......................... p.11, 16
ACID p.8
Annulation....................... p.8
Attente........................... p.30
Cohrence............... p.7, 8, 8, 20
COMMIT................... p.9, 11, 14
Concurrence............. p.7, 20, 26
Dfaillance....................... p.7
Dverrouillage................. p.24
Durabilit......................... p.9
Stphane Crozat
Ecriture.......................... p.23
Excution......................... p.8
Fiabilit.......................... p.16
Inter-blocage.............. p.24, 26
Journal..................... p.9, 14, 14
Lecture........................... p.23
Oracle.................... p.10, 11, 16
Panne............... p.9, 13, 14, 14, 18
Perte p.20
PL/SQL....................... p.11, 16
67