Академический Документы
Профессиональный Документы
Культура Документы
pour
Oracle 10g
Razvan Bizo
La transaction
SAVEPOINT
Le verrouillage
COMMIT
Module 14 : Les
transactions
Objectifs
A la fin de ce module, vous serez mme deffectuer les tches suivantes :
Dcrire les concepts dune transaction.
Structurer une transaction en plusieurs parties.
Dcrire les composants de la base de donnes et de linstance.
Dcrire les niveaux disolation dOracle.
Dcrire le verrouillage des ressources en Oracle.
Dcrire le traitement de validation ou de rejet de la transaction.
Contenu
Les transactions ............................... 14-2 La conservation des blocs ..............14-17
Dbut et fin de transaction............... 14-4 Flashback........................................14-18
Structuration de la transaction ......... 14-5 DBMS_FLASHBACK...................14-19
Lisolation........................................ 14-8 Fonctions de conversion.................14-22
Les niveaux disolation.................. 14-10 Interrogation FLASHBACK ..........14-24
Le verrouillage............................... 14-12 Interrogation des versions ..............14-26
Le Segment Undo .......................... 14-15 Atelier 14.......................................14-29
La lecture cohrente....................... 14-16
14-1
Les transactions
Les transactions
Atomicit
Cohrence
Isolation
Durabilit
TSOFT - ORACLE 10g SQL et PL*SQL
La cration d'une base de donnes ne supportant qu'un utilisateur simple n'est pas trs
utile. Le contrle de multiples utilisateurs mettant jour les mmes donnes et en
mme temps est crucial ; il est li l'uniformit et la simultanit des donnes. La
simultanit des donnes signifie que de nombreuses personnes peuvent accder aux
mmes donnes en mme temps, alors que l'uniformit des donnes signifie que les
rsultats visualiss par une personne sont cohrents l'intrieur d'une ou plusieurs
transactions courantes.
Une transaction est un ensemble d'ordres SQL qui ont pour objectif de faire passer la
base de donnes, en une seule tape, d'un tat cohrent un autre tat cohrent.
Une transaction qui russit, modifie la base de donnes dans un nouvel tat cohrent.
Si elle choue (volontairement ou involontairement), les modifications dj effectues
dans la base sont annules, de sorte qu'elle retrouve l'tat cohrent antrieur au dbut
de la transaction. C'est Oracle qui se charge entirement de toute cette gestion.
Les transactions devraient tre aussi petites que possible, avec toutes les oprations
adaptes pour le changement simple des donnes. Afin qu'une srie d'oprations soit
considre comme une transaction, elle doit prsenter les proprits :
Atomicit
Cohrence
Isolation
14-2
Une transaction doit tre une unit atomique de travail ; elle ne peut
russir que si toutes ses oprations russissent.
Quand une transaction est termine, elle doit laisser les donnes dans un
tat cohrent incluant toutes les rgles d'intgrit de donnes.
Les transactions doivent tre isoles des changements effectus par
d'autres transactions, soit avant que la transaction ne dmarre, soit avant
le dmarrage de chaque opration dans la transaction. Ce niveau
d'isolation est configurable par l'application.
Durabilit
Attention
Bien que de nombreuses personnes considrent que les transactions sont des groupes
d'instructions SQL, chaque instruction SQL est une transaction.
Si, pendant l'excution d'une simple instruction SQL, une erreur se produit, le travail
effectu par cette instruction est annul comme s'il ne s'tait jamais produit, c'est le
niveau d'instruction uniforme.
Pour tre sr de l'uniformit des donnes quand on dveloppe des applications, il suffit
de grouper logiquement plusieurs instructions SQL dans une transaction simple. Celleci peut alors tre traite comme unit simple de travail en utilisant les ordres de
contrle des transactions.
14-3
Dbut de la session
Dbut
transaction
UPDATE
INSERT
Fin transaction
prcdente
ROLLBACK
DELETE
temps
Fin
transaction
COMMIT
14-4
Structuration de la transaction
Structuration de la transaction
Dbut de la session
ROLLBACK
INSERT
Fin transaction
prcdente
UPDATE
DELETE
temps
Fin
transaction
COMMIT
14-5
14-6
14-7
Lisolation
L'isolation
Niveau disolation
READ UNCOMMITED
READ COMMITED
REPEATABLE READ
SERIALIZABLE
9
8
8
8
9
9
8
8
Lecture fantme
9
9
9
8
Module 14 : Les transactions
Une transaction peut s'isoler des autres transactions. C'est obligatoire dans les
systmes de base de donnes utilisateurs multiples pour maintenir l'uniformit de
donnes. La norme SQL-92 dfinit quatre niveaux d'isolation pour les transactions,
s'tendant d'une uniformit trs faible des donnes une uniformit trs forte.
Pourquoi n'emploierait-on pas le niveau le plus fort pour toutes les transactions ? C'est
une question de ressource. Plus le niveau d'isolation est fort, plus le verrouillage des
ressources est intense. De plus, cela rduit le nombre d'utilisateurs pouvant accder
aux donnes simultanment. Comme vous pourrez le voir plus loin, le rglage du juste
niveau est un compromis entre l'uniformit et la simultanit.
Chacun de ces niveaux d'isolation peut produire certains effets secondaires connus
sous le nom de DIRTY READ (lecture incohrente), FUZZY READ (lecture non
rptitive) et PHANTOM READ (lecture fantme). Seules les transactions avec un
niveau disolation de type SERIALIZABLE sont immunises.
Lecture incohrente
14-8
Lecture fantme
14-9
READ UNCOMMITED
READ COMMITED
REPEATABLE READ
SERIALIZABLE
READ UNCOMMITED
Le plus faible niveau restrictif permet une transaction de lire des donnes qui ont t
changes, mais pas encore valides.
READ COMMITED
C'est le paramtre par dfaut pour Oracle. Il assure que chaque requte dans une
transaction lit seulement les donnes valides.
REPEATABLE READ
Ce niveau permet une transaction de lire les mmes donnes plusieurs fois avec la
garantie qu'elle recevra les mmes rsultats chaque fois. Vous pouvez le raliser en
plaant des verrous sur les donnes qui sont lues, pour vous assurer qu'aucune autre
transaction ne les modifiera pendant la dure de la transaction considre.
SERIALIZABLE
Avec ce niveau le plus restrictif, une transaction ne prend en compte que les donnes
valides avant le dmarrage de la transaction, ainsi que les changements effectus par
la transaction.
Le choix du niveau correct pour vos transactions est important. Bien que les
transactions avec un niveau disolation de type SERIALIZABLE assurent une
protection complte, elles affectent galement la simultanit en raison de la nature
des verrous placs sur les donnes. C'est la nature de votre application qui dtermine
le meilleur niveau.
14-10
14-11
Le verrouillage
Le verrouillage
14-13
14-14
Le Segment Undo
Le Segment Undo
Lancienne
image
La nouvelle
image
La Table
Le Segment Undo
Lordre
LMD
Module 14 : Les transactions
14-15
La lecture cohrente
La lecture cohrente
SELECT * FROM table
La Table
Le Segment Undo
TSOFT - ORACLE 10g SQL et PL*SQL
Une des caractristiques d'Oracle est sa capacit grer l'accs concurrent aux
donnes, c'est--dire l'accs simultan de plusieurs utilisateurs la mme donne.
La lecture consistante, telle qu'elle est prvue par Oracle assure que :
Les donnes interroges ou manipules, dans un ordre SQL, ne changeront pas de
valeur entre le dbut et la fin. Tout se passe comme si un clich tait effectu sur la
totalit de la base au dbut de l'ordre et que seul ce clich soit utilis tout au long
de son excution.
Les lectures ne seront pas bloques par des utilisateurs effectuant des modifications
sur les mmes donnes.
Les modifications ne seront pas bloques par des utilisateurs effectuant des lectures
sur ces donnes.
Un utilisateur ne peut lire les donnes modifies par un autre, si elles n'ont pas t
valides.
Il faut attendre la fin des modifications en cours dans une autre transaction afin de
pouvoir modifier les mmes donnes.
14-16
RETENTION GUARANTEE
RETENTION NOGUARANTEE
Rcuprer
une
transaction
TSOFT - ORACLE 10g SQL et PL*SQL
Annuler
Lecture
une
transaction cohrente
Module 14 : Les transactions
RETENTION GUARANTEE
Les blocs UNDO sont conservs dans le tablespace, pour tous les segments, mme si
les transactions qui utilisent ces segments naboutissent pas. En effet, un tablespace
paramtre de manire donner priorit la conservation des modifications plutt
quaux transactions.
RETENTION NOGUARANTEE
Les blocs UNDO sont conservs dans le tablespace, pour tous les segments,
uniquement si les transactions qui utilisent ces segments nont pas besoin de cette
espace.
14-17
Flashback
Flashback
14-18
DBMS_FLASHBACK
DBMS_FLASHBACK
ENABLE_AT_SYSTEM_CHANGE_NUMBER
Une procdure qui ouvre un tat de visualisation des donnes dans leur version au
numro du changement systme (SCN) donn.
ENABLE_AT_TIME
Une procdure qui ouvre un tat de visualisation des donnes dans leur version un
moment donn. Attention, louverture de ltat de visualisation est toujours effectue
partir dun numro du changement systme (SCN) ; ainsi Oracle convertit la date et
lheure en SCN. La conversion seffectue avec une prcision trs faible, le numro du
changement systme (SCN) se retrouve dans un laps de temps de cinq minutes avant ;
pour une meilleure prcision utiliser le numro du changement systme (SCN).
DISABLE
14-19
14-20
Dans lexemple prcdent vous pouvez voir la cration dun enregistrement dans la
table CATEGORIES, ainsi que la validation de la transaction par la commande
COMMIT . On rcupre le numro du changement systme (SCN) laide la
fonction GET_SYSTEM_CHANGE_NUMBER .
Le mme enregistrement est modifie et la transaction valid, puis on rcupre
galement le numro du changement systme.
Par la suite, on initialise deux fois le mode FLASHBACK , pour rcuprer les
informations dans ltat initial, avant linsertion, ainsi que ltat de lenregistrement
immdiat aprs linsertion. La dernire requte renvois ltat actuel de
lenregistrement.
14-21
Fonctions de conversion
Fonctions de conversions
SCN_TO_TIMESTAMP
TIMESTAMP_TO_SCN
SCN_TO_TIMESTAMP
La fonction SCN_TO_TIMESTAMP permet de convertir le numro du
changement systme (SCN), en une valeur de type TIMESTAMP .
SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
GET_SYSTEM_CHANGE_NUMBER
-----------------------1969002
SQL> SELECT SCN_TO_TIMESTAMP(1969002) FROM DUAL;
SCN_TO_TIMESTAMP(1969002)
---------------------------------------------------26/05/06 13:29:10,000000000
TIMESTAMP_TO_SCN
La fonction TIMESTAMP_TO_SCN permet de convertir une valeur de type
TIMESTAMP , une date et heure, en numro du changement systme (SCN).
SQL> SELECT SYSTIMESTAMP, TIMESTAMP_TO_SCN(SYSTIMESTAMP)
2 FROM DUAL;
SYSTIMESTAMP
TIMESTAMP_TO_SCN(SYSTIMESTAMP)
---------------------------------- -----------------------------26/05/06 13:38:02,062000 +02:00
1969239
14-22
Astuce
Un moyen trs simple de rcuprer le numro du changement systme (SCN) est de
convertir la pseudo-colonne SYSTIMESTAMP.
14-23
Interrogation FLASHBACK
Interrogation FLASHBACK
14-24
14-25
1 ligne cre.
SQL> COMMIT;
Validation effectue.
SQL> SELECT SYSTIMESTAMP, TIMESTAMP_TO_SCN(SYSTIMESTAMP) SCN
2 FROM DUAL;
SYSTIMESTAMP
SCN
-------------------------------- ---------26/05/06 15:22:12,156000 +02:00
1972494
SQL> UPDATE PRODUITS SET UNITES_STOCK = UNITES_STOCK + 100
2 WHERE REF_PRODUIT = 80;
1 ligne mise jour.
SQL> COMMIT;
Validation effectue.
SQL> SELECT SYSTIMESTAMP, TIMESTAMP_TO_SCN(SYSTIMESTAMP) SCN
2 FROM DUAL;
SYSTIMESTAMP
SCN
14-27
ENDTIME
-----------------26/05/06 15:27:12
26/05/06 15:25:39
Vous pouvez galement utiliser loption VERSIONS dans une sous-requte dans
les ordres SQL de type LMD ou LDD .
14-28
Atelier 14
Atelier 14
Les transactions
Structuration de la transaction
Dure : 15 minutes
TSOFT - ORACLE 10g SQL et PL*SQL
Questions
14-1.
14-2.
14-3.
14-4.
Vous avez ouvert deux sessions avec le mme utilisateur. Dans la premire
session, vous modifiez un enregistrement d'une table. Est-ce que dans la
deuxime session, connecte avec le mme utilisateur, vous pouvez voir la
modification effectue dans l'autre session ?
14-5.
Quelles sont les commandes SQL qui peuvent tre annules dans une
transaction ?
A. INSERT
B. ALTER
C. CREATE
D. DROP
E. TRUNCATE
F. DELETE
G. UPDATE
14-29
Pour les mmes choix que la question prcdente, quelles sont les
commandes SQL qui valident automatiquement une transaction ?
14-7.
14-8.
Whalen
14-30
14-9.
Whalen
Exercice n 1
Whalen
Les transactions
14-31
14-32