Вы находитесь на странице: 1из 33

SQL

pour

Oracle 10g

Razvan Bizo

Tsoft, Groupe Eyrolles, 2006, ISBN : 2-212-12055-9, ISBN 13 : 978-2-212-12055-4

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

Eyrolles/Tsoft SQL pour Oracle10g

14-1

Module 14 : Les transactions

Les transactions
Les transactions

Atomicit
Cohrence
Isolation
Durabilit
TSOFT - ORACLE 10g SQL et PL*SQL

Module 14 : Les transactions

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.

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions

Durabilit

Une transaction doit tre rcuprable aussitt qu'elle est termine.


Mme si un chec du systme se produit aprs la fin de la transaction,
les effets de la transaction sont permanents dans le systme.

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.

Eyrolles/Tsoft SQL pour Oracle10g

14-3

Module 14 : Les transactions

Dbut et fin de transaction


Dbut et fin de transaction

Dbut de la session

Dbut
transaction

UPDATE
INSERT

Fin transaction
prcdente

TSOFT - ORACLE 10g SQL et PL*SQL

ROLLBACK

DELETE

temps
Fin
transaction

COMMIT

Module 14 : Les transactions

Une transaction commence louverture de la session ou la fin de la prcdente


transaction. La toute premire transaction dbute au lancement du programme. Il
n'existe pas d'ordre implicite de dbut de transaction.
La fin d'une transaction peut tre dfinie explicitement par l'un des ordres
COMMIT ou ROLLBACK :
COMMIT termine une transaction par la validation des donnes. Il rend
dfinitives et accessibles aux autres utilisateurs toutes les modifications effectues
pendant la transaction en les sauvegardant dans la base de donnes et annule tous
les verrous positionns pendant la transaction (voir Mcanismes de verrouillage);
ROLLBACK termine une transaction en annulant toutes les modifications de
donnes effectues et annule tous les verrous positionns pendant la transaction.
La fin d'une transaction peut aussi tre implicite et correspondre l'un des vnements
suivants :
l'excution d'un ordre de dfinition d'objet : CREATE , DROP ,
ALTER , GRANT , REVOKE , TRUNCATE , etc. se solde par la
validation de la transaction en cours;
l'arrt normal d'une session par EXIT se solde par la validation de la
transaction en cours;
l'arrt anormal d'une session par annulation de la transaction en cours.
Dans le cas darrt brutal de la machine qui hberge la base de donnes, Oracle
garantit que toutes les transactions dj valides par un COMMIT ou un
ROLLBACK seront assures. Au redmarrage de l'instance, Oracle efface toutes
les transactions en cours qui n'taient ni valides, ni supprimes. Ce mcanisme
d'annulation automatique ne ncessite aucune intervention de l'administrateur Oracle.

14-4

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions

Structuration de la transaction
Structuration de la transaction

Dbut de la session

ROLLBACK

SAVEPOINT n SAVEPOINT n+1


Dbut
transaction

INSERT

Fin transaction
prcdente

TSOFT - ORACLE 10g SQL et PL*SQL

UPDATE

DELETE

temps
Fin
transaction

COMMIT

Module 14 : Les transactions

Il est possible de subdiviser une transaction en plusieurs tapes en sauvegardant les


informations modifies la fin de chaque tape, tout en gardant la possibilit soit de
valider l'ensemble des mises jour, soit d'annuler tout ou partie des mises jour la
fin de la transaction.
Le dcoupage de la transaction en plusieurs parties se fait en insrant des points de
repre, ou SAVEPOINT .
Les points de repre SAVEPOINT sont des points de contrle utiliss dans les
transactions pour annuler partiellement l'une d'elles. Dans ce cas, un savepoint est
dfini par un identifiant et peut tre rfrenc dans la clause ROLLBACK .
La notion de SAVEPOINT est trs utile dans la conception de programmes
batch.
Note
Lannulation des mises jour effectues depuis un point de repre SAVEPOINT
de la transaction conserve les mises jours antrieures, les points de repre
SAVEPOINT inclus, et rejette les modifications postrieures, les points de
repre SAVEPOINT inclus.
Si le nom du point de repre SAVEPOINT existe dj dans la mme transaction
le nouveau point de repre SAVEPOINT cr efface lancien.

SQL> INSERT INTO CATEGORIES


2 ( CODE_CATEGORIE, NOM_CATEGORIE, DESCRIPTION )
3 VALUES ( 9,'Lgumes et fruits','Lgumes et fruits frais');
1 ligne cre.
SQL> SAVEPOINT POINT_REPERE_1;

Eyrolles/Tsoft SQL pour Oracle10g

14-5

Module 14 : Les transactions


Point de sauvegarde (SAVEPOINT) cr.
SQL> INSERT INTO FOURNISSEURS (NO_FOURNISSEUR, SOCIETE, ADRESSE,
2
VILLE, CODE_POSTAL, PAYS, TELEPHONE, FAX)
3 VALUES ( 30, 'Lgumes de Strasbourg', '104, rue Mlanie',
4 'Strasbourg',67200,'France','03.88.83.00.68','03.88.83.00.62');
1 ligne cre.
SQL> SAVEPOINT POINT_REPERE_2;
Point de sauvegarde (SAVEPOINT) cr.
SQL> UPDATE PRODUITS SET CODE_CATEGORIE = 9
2 WHERE CODE_CATEGORIE = 2;
12 ligne(s) mise(s) jour.
SQL> SAVEPOINT POINT_REPERE_3;
Point de sauvegarde (SAVEPOINT) cr.
SQL> UPDATE PRODUITS SET NO_FOURNISSEUR = 30
2 WHERE NO_FOURNISSEUR = 2;
4 ligne(s) mise(s) jour.
SQL> SELECT NOM_PRODUIT, NO_FOURNISSEUR, CODE_CATEGORIE
2 FROM PRODUITS
3 WHERE NO_FOURNISSEUR = 30 AND
4
CODE_CATEGORIE = 9;
NOM_PRODUIT
NO_FOURNISSEUR CODE_CATEGORIE
-------------------------------- -------------- -------------Chef Anton's Cajun Seasoning
30
9
Chef Anton's Gumbo Mix
30
9
Louisiana Fiery Hot Pepper Sauce
30
9
Louisiana Hot Spiced Okra
30
9
SQL> ROLLBACK TO POINT_REPERE_2;
Annulation (ROLLBACK) effectue.
SQL> SELECT NOM_PRODUIT, NO_FOURNISSEUR, CODE_CATEGORIE
2 FROM PRODUITS
3 WHERE NO_FOURNISSEUR = 2 AND
4
CODE_CATEGORIE = 9;
NOM_PRODUIT
NO_FOURNISSEUR CODE_CATEGORIE
-------------------------------- -------------- -------------Chef Anton's Cajun Seasoning
2
2
Chef Anton's Gumbo Mix
2
2
Louisiana Fiery Hot Pepper Sauce
2
2
Louisiana Hot Spiced Okra
2
2

14-6

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions

SQL> ROLLBACK TO POINT_REPERE_3;


ROLLBACK TO POINT_REPERE_3
*
ERREUR la ligne 1 :
ORA-01086: le point de sauvegarde 'POINT_REPERE_3' n'a jamais t
tabli

Lexemple prcdent illustre lutilisation du SAVEPOINT pour la structuration


dune transaction. La transaction insre un enregistrement dans la table
CATEGORIES et un autre dans la table FOURNISSEURS ; aprs chaque insertion
on sauvegarde les modifications avec les points de repre POINT_REPERE_1
et POINT_REPERE_2. La suite de la transaction continue avec la modification de la
table PRODUITS, on attribue tous les produits fournis par le fournisseur numro 2 au
nouveau fournisseur et on modifie la catgorie des ces produits par la nouvelle
catgorie cre.
Annulation des mises jour effectues depuis le point de repre
POINT_REPERE_2 en conservant les mises jours effectus avant lui. Le
POINT_REPERE_3 est ultrieur au POINT_REPERE_2 et nest plus, alors,
reconnu par le systme.

Eyrolles/Tsoft SQL pour Oracle10g

14-7

Module 14 : Les transactions

Lisolation
L'isolation

Niveau disolation
READ UNCOMMITED

READ COMMITED
REPEATABLE READ
SERIALIZABLE

TSOFT - ORACLE 10g SQL et PL*SQL

Lecture incohrente Lecture non rptitive

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

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions


La transaction T2 met jour un enregistrement sans poser de verrous, celui-ci est
disponible directement pour les autres transactions (exemple T1). Cette lecture peut
tre errone, particulirement si la transaction T1 annule leffet de sa modification
avec la commande ROLLBACK .
La lecture faite par la transaction T1 est fausse, on la nomme DIRTY READ (lecture
incohrente).

Lecture non rptitive

La transaction T1 consulte un enregistrement, (pour contrler sa disponibilit par


exemple) et dans la suite de la transaction le consulte nouveau (pour le mettre
jour). Si une seconde transaction T2 modifie lenregistrement entre les deux lectures,
la transaction T1 va lire deux fois le mme enregistrement, mais obtenir des valeurs
diffrentes.
La lecture faite par la transaction est une lecture non rptitive FUZZY READ.

Lecture fantme

La transaction T1 lit un ensemble denregistrements rpondant un critre donn


des fins de dcompte ou dinventaire. Paralllement, la transaction T2 modifie les
donnes. Au dpart, il y a cinq enregistrements satisfaisant le critre. La transaction
T1 lira en fin de compte quatre enregistrements, de faon tout fait incohrente,
puisque lenregistrement 3 est supprim, les enregistrements 4 et 1 sont modifis et un
nouvel enregistrement 6 apparat.
La lecture faite par la transaction est une lecture non rptitive PHANTOM READ.
Eyrolles/Tsoft SQL pour Oracle10g

14-9

Module 14 : Les transactions

Les niveaux disolation


Les niveaux disolation

READ UNCOMMITED

READ COMMITED

REPEATABLE READ

SERIALIZABLE

TSOFT - ORACLE 10g SQL et PL*SQL

Module 14 : Les transactions

Le niveau d'isolation indique le comportement de la transaction par rapport aux autres


transactions concurrentes. Plus le niveau d'isolation est faible, plus les autres
transactions peuvent agir sur les donnes concernes par la premire.

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

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions

LES NIVEAUX D'ISOLATION D'ORACLE


Oracle choisit de supporter les niveaux d'isolation de transaction READ
COMMITED et SERIALIZABLE avec un autre niveau appel READ-ONLY
(lecture seule). Le niveau READ-ONLY est semblable REPEATABLE READ, car
on ne peut voir que les changements valids au dmarrage de la transaction ;
cependant, comme son nom le suggre, il est en lecture seule et ne permet aucun
changement par l'utilisation des instructions INSERT , UPDATE ou
DELETE . Ce niveau fournit une excellente simultanit pour des longues
transactions qui ne mettent jour aucune donne.
READ COMMITED est le niveau d'isolation par dfaut d'Oracle. Bien qu'il permette
les lectures non rptitives et les lectures fantme, vous pouvez l'employer
efficacement dans vos applications.
READ COMMITED fournit un dbit plus lev que les transactions REPEATABLE
READ et SERIALIZABLE, et c'est un bon choix pour les applications o peu de
transactions sont susceptibles d'entrer en conflit.
La valeur par dfaut peut tre adquate, mais vous aurez peut-tre besoin de la changer
pour supporter votre application. Oracle vous permet de paramtrer l'isolation au
niveau de la transaction ou de la session selon vos besoins. Pour dfinir le niveau
d'isolation dune transaction, employez l'instruction SET TRANSACTION au
dmarrage de votre transaction.
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION READ ONLY;
Si votre application (ou une partie de votre application) a besoin d'tre excute un
niveau diffrent d'isolation, vous pouvez galement le changer en employant la
commande ALTER SESSION. Cette commande applique alors le niveau d'isolation
spcifi toutes les transactions dans la session.
ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;
ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;

Eyrolles/Tsoft SQL pour Oracle10g

14-11

Module 14 : Les transactions

Le verrouillage
Le verrouillage

Les verrous de type LMD

Les verrous de type LDD

Module 14 : Les transactions

TSOFT - ORACLE 10g SQL et PL*SQL

Comme nous avons pu le remarquer prcdemment, le rglage du niveau d'isolation


pour une transaction est directement li aux verrous qui sont placs sur les tables dans
votre requte. Le verrouillage est une partie importante de n'importe quel systme de
base de donnes parce qu'il contrle (lecture, criture et mise jour) les donnes dans
la base de donnes.
Le verrouillage fourni par Oracle peut tre implicite ou explicite. Dans les deux cas, le
verrouillage implicite est le plus adquat.
Oracle supporte le verrouillage des ressources en deux modes :
SHARED MODE (le mode partag) permet aux utilisateurs multiples de placer un
verrou sur la ressource en mme temps. Les utilisateurs qui lisent l'information
peuvent partager les donnes, mais ne peuvent mettre jour l'information parce que
ce processus exige un verrou exclusif.
EXCLUSIVE MODE (le mode exclusif) verrouille la ressource pour un usage
exclusif, l'empchant d'tre partage ou employe par d'autres transactions.
Il y a plusieurs types de verrous dans Oracle. Voici les deux plus courants : les verrous
LMD et LDD.

Les verrous LMD


Les verrous LMD (galement connus sous le nom de verrous de donnes) sont les plus
courants. Ils contrlent quand une transaction peut accder des donnes dans une
table. Toutes les fois qu'une transaction excute une instruction pour modifier des
donnes par l'intermdiaire de INSERT , UPDATE , DELETE ou
SELECT FOR UPDATE , Oracle place automatiquement un verrou de niveau
ligne exclusif sur chaque ligne affecte par l'instruction. Ainsi, aucune autre
transaction ne pourra modifier l'information dans les lignes, jusqu' ce que la
transaction originale valide les changements ou les annule. Une transaction peut
contenir tout nombre de verrous de niveau ligne ; Oracle n'lev pas ces verrous un
niveau plus grand. Toutes les fois qu'un verrou de niveau ligne est obtenu, Oracle
14-12

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions


acquiert galement un verrou de table afin d'assurer l'accs la table et pour empcher
que des oprations incompatibles aient lieu.
Il y a quatre types de verrous de niveau table.

Le verrou LMD ROW SHARE


C'est un verrou de niveau table qui permet un accs simultan la table, mais interdit
aux utilisateurs d'acqurir un verrou exclusif de table. Il fonctionne quand une
transaction emploie SELECT FOR UPDATE pour une mise jour de lignes
dans la table. C'est le mode de verrouillage le moins restrictif et celui qui fournit la
plus grande simultanit.

Le verrou LMD ROW EXCLUSIVE


Ce verrou est plac sur la table toutes les fois qu'une instruction INSERT ,
UPDATE ou DELETE met jour une ou plusieurs lignes dans la table. Il
permet des transactions multiples de mettre jour la table, aussi longtemps qu'elles
ne mettent pas jour les mmes lignes. Il est identique un verrou partag de lignes,
mais il interdit d'acqurir un verrou partag sur la table.

Le verrou LMD SHARE


Ce verrou permet des transactions multiples lors de l'interrogation d'une table, mais
seule une transaction avec ce verrou partag peut mettre jour toutes les lignes. Un
verrou partag ne peut tre acquis qu'en employant l'instruction explicite
LOCK TABLE .

Le verrou LMD SHARE ROW EXCLUSIVE


Il est identique un verrou partag, mais il interdit d'autres utilisateurs d'acqurir un
verrou partag ou de mettre jour des lignes. Un verrou exclusif de ligne partag ne
peut tre acquis qu'en employant l'instruction explicite LOCK TABLE .

Le verrou LMD EXCLUSIVE


Il permet aux autres utilisateurs d'interroger des lignes dans la table, mais interdit
n'importe quelle autre activit de mise jour. Un verrou exclusif ne peut tre acquis
qu'en employant l'instruction explicite LOCK TABLE .
Alors qu'Oracle verrouille automatiquement les lignes et les tables en votre nom, vous
pouvez avoir besoin de verrouiller explicitement une table pour assurer l'uniformit.
Les verrous SHARE , SHARE ROW EXCLUSIVE et EXCLUSIVE ,
peuvent tre acquis explicitement en employant l'instruction LOCK TABLE .
LOCK TABLE table_name IN ROW SHARE MODE;
LOCK TABLE table_name IN ROW EXCLUSIVE MODE;
LOCK TABLE table_name IN SHARE MODE;
LOCK TABLE table_name IN SHARE ROW EXCLUSIVE MODE;
LOOK TABLE table_name IN EXCLUSIVE MODE;
Note
Seules les tables peuvent tre verrouilles explicitement. Il n'y a aucune option pour
verrouiller explicitement des lignes dans une table.

Eyrolles/Tsoft SQL pour Oracle10g

14-13

Module 14 : Les transactions


Comme toujours, vous devez faire attention en verrouillant explicitement les tables,
parce que cela peut causer des rsultats inattendus. D'autres utilisateurs risquent de ne
pas pouvoir accder aux tables que vous avez fermes.
De la mme manire que les verrous implicites, les verrous explicites sont librs
toutes les fois que la transaction qui a verrouill la table est valide ou annule.
En utilisant l'instruction LOCK TABLE , vous pouvez spcifier le paramtre
NOWAIT . Celui-ci demande Oracle de renvoyer un message d'erreur si la table
ne peut pas tre verrouille immdiatement. Sans ce paramtre, Oracle attend que
toutes les autres transactions soient termines, puis acquiert le verrou de table indiqu.

Les verrous LDD


Un autre type commun de verrou est un verrou Langage Dfinition de Donnes
(LDD), galement connu sous le nom de verrou dictionnaire. Ces verrous sont acquis
sur le dictionnaire des donnes, toutes les fois que vous essayez de modifier la
dfinition d'un objet de base de donnes. Il y a trois types de verrous LDD,
EXCLUSIVE , SHARED et BREAKABLE PARSE .

Le verrou LDD EXCLUSIVE


La plupart des oprations LDD imposent un verrou exclusif chaque fois que vous
voulez changer la dfinition d'un objet. N'importe quelle transaction qui possde
n'importe quel type de verrou sur une table empche l'utilisateur d'acqurir un verrou
exclusif sur cette table. Ce n'est pas une mauvaise chose que d'empcher le
changement de la structure d'une table quand une requte met jour une information.

Le verrou LDD SHARED


Alors que vous avez besoin d'un verrou exclusif DDL pour changer un objet, Oracle
place des verrous DDL partags sur les objets que vous rfrencez dans les vues, les
procdures stockes, les triggers, etc. Par exemple, toutes les tables qui sont consultes
dans une procdure stocke possdent des verrous DDL pendant l'excution du code.
Ceci permet des transactions multiples de mettre en rfrence les tables de base.
Cependant, les verrous partags empchent l'acquisition d'un verrou exclusif et le
changement des objets rfrencs.

Le verrou LDD BREAKABLE PARSE


Ce type de verrou est obtenu pendant la phase d'analyse d'une instruction SQL, aussi
longtemps que l'instruction demeure dans le cache de bibliothque (Library Cache).
Comme son nom l'indique, ce type de verrou peut tre cass, toutes les fois qu'un objet
rfrenc par une requte dans le cache de bibliothque (Library Cache) est chang ou
abandonn. Cela signale Oracle que l'instruction peut ne plus tre valide et que vous
devez la recompiler.

14-14

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions

Le Segment Undo
Le Segment Undo

Lancienne
image
La nouvelle
image
La Table

Le Segment Undo

TSOFT - ORACLE 10g SQL et PL*SQL

Lordre
LMD
Module 14 : Les transactions

Chaque base de donnes abrite un ou plusieurs segments UNDO. Il contient les


anciennes valeurs des enregistrements en cours de modification dans les transactions,
qui sont utilises pour assurer une lecture consistante des donnes, pour annuler des
transactions et en cas de restauration.
Pour grer la fois les lectures et les mises jour, Oracle conserve les deux
informations :
Les donnes mises jour sont crites dans les segments de donnes de la base.
Les anciennes valeurs sont consignes dans les segments UNDO.
Ainsi, l'utilisateur de la transaction qui modifie les valeurs lira les donnes modifies
et tous les autres liront les donnes non modifies.
Chaque fois qu'une instruction INSERT , UPDATE ou DELETE met
jour une ou plusieurs lignes dans la table, un verrou LMD ROW EXCLUSIVE
est plac. Il permet des transactions multiples de mettre jour la table, aussi
longtemps qu'elles ne mettent pas jour les mmes lignes.

Eyrolles/Tsoft SQL pour Oracle10g

14-15

Module 14 : Les transactions

La lecture cohrente
La lecture cohrente
SELECT * FROM table

La Table
Le Segment Undo
TSOFT - ORACLE 10g SQL et PL*SQL

Module 14 : Les transactions

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

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions

La conservation des blocs


La conservation des blocs

RETENTION GUARANTEE

RETENTION NOGUARANTEE

Rcuprer
une
transaction
TSOFT - ORACLE 10g SQL et PL*SQL

Annuler
Lecture
une
transaction cohrente
Module 14 : Les transactions

Pour un tablespace UNDO, il existe un paramtre RETENTION qui dtermine la


priorit de gestion pour les blocs UNDO dans les segments. Le paramtre peut tre
dfini la cration du tablespace, mais il peut tre modifi par la suite.

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.

Eyrolles/Tsoft SQL pour Oracle10g

14-17

Module 14 : Les transactions

Flashback
Flashback

TSOFT - ORACLE 10g SQL et PL*SQL

Module 14 : Les transactions

Le concept FLASHBACK t introduit dans la version Oracle9i, il permet de


visualiser les donnes dans ltat ou elles taient plusieurs heures auparavant. Comme
on a vue prcdemment cette fonctionnalit utilise les segments stockes dans le
tablespace UNDO pour retrouver linformation.
Attention
Il convient de faire attention au fait que seules les transactions valides sont visibles.
En effet, cest un tat stable de la base qui est interrog, et il est impossible
dinterroger les environnements de chaque transaction en cours dexcution, non
valide, et pouvant sexcuter en parallle avec plusieurs dautres.
Linterrogation seffectue en utilisant comme base de recherche le numro de
changement systme (SCN). Vous pouvez galement utiliser les informations
temporelles, mais toute date et heure est convertie en un numro de changement
systme (SCN).

Oracle assigne chaque transaction un numro, le SCN (System Change Number).


Dans la version Oracle9i, vous utilisez un package fourni DBMS_FLASHBACK
pour ouvrir un tat en lecture afin de pouvoir interroger les donnes.
Dans la version Oracle10g, lutilisation du FLASHBACK est simplifie et
introduite directement dans la syntaxe dune requte dinterrogation SQL.
Il existe deux types dinterrogations pour rcuprer les donnes dans leur tat
antrieur :
Linterrogation des donnes dans leur tat un instant donn.
La visualisation des modifications apportes aux enregistrements dans un intervalle
de temps.

14-18

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions

DBMS_FLASHBACK
DBMS_FLASHBACK

TSOFT - ORACLE 10g SQL et PL*SQL

Module 14 : Les transactions

Le package DBMS_FLASHBACK t introduit dans la version Oracle9i ; il


permet de modifier la session pour que chaque utilisateur puisse revenir dans le pass,
rcuprer les donnes telles qu'elles taient un moment donn dans le pass. Pour
plus dinformations sur les packages voir le module correspondent .
Le package DBMS_FLASHBACK contient plusieurs procdures et fonctions qui
permettent de mettre en uvre le mode FLASHBACK .
GET_SYSTEM_CHANGE_NUMBER
Une fonction qui retourne le numro du changement systme (SCN) au moment de
lexcution. Vous avez besoin de cette valeur pour pouvoir ouvrir un tat de
visualisation ce moment.
SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER
2 FROM DUAL;
GET_SYSTEM_CHANGE_NUMBER
-----------------------1965481

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

Eyrolles/Tsoft SQL pour Oracle10g

14-19

Module 14 : Les transactions


Une procdure qui arrte ltat de visualisation.
La mise uvre comporte les tapes suivantes :
Louverture du mode FLASHBACK laide de la procdure
ENABLE_AT_SYSTEM_CHANGE_NUMBER ou ENABLE_AT_TIME .
Interrogations de donnes dans leur version au numro du changement systme
(SCN).
Arrter le mode FLASHBACK .
Attention
Le mode FLASHBACK permet uniquement la visualisation des donnes ; vous
navez pas le droit de modifier les donnes.
Il est toutefois possible douvrir un curseur, ce qui implique laccomplissement de la
phase EXECUTE (lexcution) de la requte SQL. Dans cette phase, les blocs qui
contiennent les enregistrements de la ou des tables composant la requte sont chargs
dans un buffer et mis en forme.
Les donnes demandes sont prpares au niveau du serveur sans tre rcupres.
Apres larrt du mode FLASHBACK , vous pouvez rcuprer les
enregistrements slectionnes et mis en forme. Pour plus dinformations voir le
module correspondant du PL/SQL.

SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER


2 FROM DUAL;
GET_SYSTEM_CHANGE_NUMBER
-----------------------1965613
SQL> INSERT INTO CATEGORIES
2 VALUES ( 9, 'Nouvelle catgorie','Nouvelle catgorie');
1 ligne cre.
SQL> COMMIT;
Validation effectue.
SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER
2 FROM DUAL;
GET_SYSTEM_CHANGE_NUMBER
-----------------------1965678
SQL> UPDATE CATEGORIES
2 SET NOM_CATEGORIE = 'Fruits et lgumes frais',
3
DESCRIPTION
= 'Fruits et lgumes frais'
4 WHERE CODE_CATEGORIE = 9;
1 ligne mise jour.

14-20

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions


SQL> COMMIT;
Validation effectue.
SQL> EXECUTE DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(1965613);
Procdure PL/SQL termine avec succs.
SQL> SELECT CODE_CATEGORIE, NOM_CATEGORIE
2 FROM CATEGORIES
3 WHERE CODE_CATEGORIE = 9;
aucune ligne slectionne
SQL> EXECUTE DBMS_FLASHBACK.DISABLE;
Procdure PL/SQL termine avec succs.
SQL> EXECUTE DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(1965678);
Procdure PL/SQL termine avec succs.
SQL> SELECT CODE_CATEGORIE, NOM_CATEGORIE
2 FROM CATEGORIES
3 WHERE CODE_CATEGORIE = 9;
CODE_CATEGORIE NOM_CATEGORIE
-------------- ------------------------9 Nouvelle catgorie
SQL> EXECUTE DBMS_FLASHBACK.DISABLE;
Procdure PL/SQL termine avec succs.
SQL> SELECT CODE_CATEGORIE, NOM_CATEGORIE
2 FROM CATEGORIES
3 WHERE CODE_CATEGORIE = 9;
CODE_CATEGORIE NOM_CATEGORIE
-------------- ------------------------9 Fruits et lgumes frais

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.

Eyrolles/Tsoft SQL pour Oracle10g

14-21

Module 14 : Les transactions

Fonctions de conversion
Fonctions de conversions

SCN_TO_TIMESTAMP

TIMESTAMP_TO_SCN

Module 14 : Les transactions

TSOFT - ORACLE 10g SQL et PL*SQL

partir de la version Oracle10g, il est possible dobtenir un numro du changement


systme (SCN) partir dune date et heure.

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

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions


SQL> SELECT SCN_TO_TIMESTAMP(1969239) FROM DUAL;
SCN_TO_TIMESTAMP(1969239)
-----------------------------------------------26/05/06 13:38:02,000000000

Astuce
Un moyen trs simple de rcuprer le numro du changement systme (SCN) est de
convertir la pseudo-colonne SYSTIMESTAMP.

Eyrolles/Tsoft SQL pour Oracle10g

14-23

Module 14 : Les transactions

Interrogation FLASHBACK
Interrogation FLASHBACK

Module 14 : Les transactions

TSOFT - ORACLE 10g SQL et PL*SQL

Le mode FLASHBACK , partir de la version Oracle10g, vous permet


dinterroger directement les donnes telles qu'elles taient un moment donn dans le
pass.
La syntaxe de linstruction SELECT :
SELECT [ALL | DISTINCT]
{* | [EXPRESSION1 [AS] ALIAS1[,...]}
FROM NOM_TABLE
[ AS OF { SCN | TIMESTAMP } valeur]
...
valeur

Indique le numro du changement systme (SCN) si


largument SCN a t choisi. Sinon il indique une
valeur de type TIMESTAMP .

SQL> SELECT SYSTIMESTAMP, TIMESTAMP_TO_SCN(SYSTIMESTAMP) SCN


2 FROM DUAL;
SYSTIMESTAMP
SCN
-------------------------------- -------26/05/06 14:23:59,531000 +02:00
1970678
SQL> INSERT INTO EMPLOYES VALUES ( 10, NULL, 'BIZO','Razvan',
2
'Formateur','M.', '03/02/1965',SYSDATE, 8000, NULL);
1 ligne cre.
SQL> COMMIT;
Validation effectue.

14-24

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions


SQL> SELECT SYSTIMESTAMP, TIMESTAMP_TO_SCN(SYSTIMESTAMP) SCN
2 FROM DUAL;
SYSTIMESTAMP
SCN
-------------------------------- -------26/05/06 14:24:45,203000 +02:00
1970721
SQL> UPDATE EMPLOYES SET PRENOM = 'Radu Razvan'
2 WHERE NO_EMPLOYE = 10;
1 ligne mise jour.
SQL> COMMIT;
Validation effectue.
SQL> SELECT SYSTIMESTAMP, TIMESTAMP_TO_SCN(SYSTIMESTAMP) SCN
2 FROM DUAL;
SYSTIMESTAMP
SCN
-------------------------------- -------26/05/06 14:25:23,890000 +02:00
1970743
SQL> SELECT NOM, PRENOM, FONCTION FROM EMPLOYES AS OF SCN 1970678
2 WHERE NO_EMPLOYE = 10;
aucune ligne slectionne
SQL> SELECT NOM, PRENOM, FONCTION FROM EMPLOYES AS OF TIMESTAMP
2
TO_TIMESTAMP( '26/05/06 14:24:45','DD/MM/YY HH24:MI:SS')
3 WHERE NO_EMPLOYE = 10;
NOM
PRENOM
FONCTION
---------- ------------------------------ ------------------------BIZO
Razvan
Formateur
SQL> SELECT NOM, PRENOM, FONCTION FROM EMPLOYES AS OF SCN 1970743
3 WHERE NO_EMPLOYE = 10;
NOM
PRENOM
FONCTION
---------- ------------------------------ ---------BIZO
Radu Razvan
Formateur
SQL> SELECT NOM, PRENOM, FONCTION FROM EMPLOYES
3 WHERE NO_EMPLOYE = 10;
NOM
PRENOM
FONCTION
---------- ------------------------------ ---------BIZO
Radu Razvan
Formateur

Dans lexemple prcdent, vous pouvez remarquer la facilit demploi du mode


FLASHBACK dans cette version. Il suffit de connaitre soit le numro du
changement systme (SCN), soit la date et lheure de la modification que vous
souhaitez rcuprer.

Eyrolles/Tsoft SQL pour Oracle10g

14-25

Module 14 : Les transactions

Interrogation des versions


Interrogation des versions

Module 14 : Les transactions

TSOFT - ORACLE 10g SQL et PL*SQL

Le mode FLASHBACK , partir de la version Oracle10g, vous permet


galement dinterroger les versions de donnes modifies.
La syntaxe de linstruction SELECT :
SELECT [ALL | DISTINCT]
{* | [EXPRESSION1 [AS] ALIAS1[,...]}
FROM NOM_TABLE
[
VERSIONS BETWEEN
{ SCN | TIMESTAMP }
{ valeur | MINVALUE } AND
{ valeur | MAXVALUE }
]
...
valeur

Indique le numro du changement systme (SCN) si


largument SCN a t choisit Sinon il indique une
valeur de type TIMESTAMP .

Indique la valeur minimale du numro du changement


systme (SCN) pour afficher les versions.
MAXVALUE
Indique la valeur maximale du numro du changement
systme (SCN) pour afficher les versions.
Il existe plusieurs pseudo-colonnes que vous pouvez interroger en mme temps que les
versions des enregistrements modifies :
MINVALUE

VERSIONS_STARTTIME Retourne une valeur de type TIMESTAMP qui


indique la date et lheure de la premire version des
enregistrements de la requte.
14-26

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions


VERSIONS_STARTSCN Retourne la valeur numro du changement systme (SCN)
pour la premire version des enregistrements de la requte.
VERSIONS_ENDTIME Retourne une valeur de type TIMESTAMP qui
indique la date et lheure de la dernire version des
enregistrements de la requte.
VERSIONS_ENDSCN
Retourne la valeur numro du changement systme (SCN)
pour la dernire version des enregistrements de la requte.
VERSIONS_XID
Retourne lidentifiant de la transaction qui a cr la version
pour chaque enregistrement de la requte.
VERSIONS_OPERATION Retourne un caractre qui indique le type de lopration
SQL qui a cr la version. Les valeurs sont I pour
INSERT , U pour UPDATE et D
pour DELETE .
SQL> SELECT SYSTIMESTAMP, TIMESTAMP_TO_SCN(SYSTIMESTAMP) SCN
2 FROM DUAL;
SYSTIMESTAMP
SCN
-------------------------------- ---------26/05/06 15:17:17,687000 +02:00
1972351
SQL>
2
3
4
5
6

INSERT INTO PRODUITS


SELECT 80, NOM_PRODUIT, NO_FOURNISSEUR, CODE_CATEGORIE,
QUANTITE, PRIX_UNITAIRE, UNITES_STOCK,
UNITES_COMMANDEES, INDISPONIBLE
FROM PRODUITS
WHERE REF_PRODUIT = 1;

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

Eyrolles/Tsoft SQL pour Oracle10g

SCN

14-27

Module 14 : Les transactions


-------------------------------- ---------26/05/06 15:25:46,984000 +02:00
1972580
SQL> DELETE PRODUITS WHERE REF_PRODUIT = 80;
1 ligne supprime.
SQL> COMMIT;
Validation effectue.
SQL> SELECT SYSTIMESTAMP, TIMESTAMP_TO_SCN(SYSTIMESTAMP) SCN
2 FROM DUAL;
SYSTIMESTAMP
SCN
-------------------------------- ---------26/05/06 15:27:17,437000 +02:00
1972620
SQL> SELECT NOM_PRODUIT,
2
UNITES_STOCK STOCK,
3
VERSIONS_OPERATION O,
4
VERSIONS_STARTTIME STARTTIME,
5
VERSIONS_ENDTIME
ENDTIME
6 FROM PRODUITS VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
7 WHERE REF_PRODUIT = 80;
NOM_PRODUIT
STOCK O STARTTIME
----------- ---------- - -----------------Chai
139 D 26/05/06 15:27:12
Chai
139 U 26/05/06 15:25:39
Chai
39 I 26/05/06 15:22:03

ENDTIME
-----------------26/05/06 15:27:12
26/05/06 15:25:39

SQL> SELECT NOM_PRODUIT,


2
UNITES_STOCK STOCK,
3
VERSIONS_OPERATION O,
4
VERSIONS_STARTSCN STARTSCN,
5
VERSIONS_ENDSCN ENDSCN,
6
VERSIONS_XID
7 FROM PRODUITS VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
8 WHERE REF_PRODUIT = 80;
NOM_PRODUIT
STOCK O
STARTSCN
ENDSCN VERSIONS_XID
----------- ---------- - ---------- ---------- ---------------Chai
139 D
1972619
02001B0066040000
Chai
139 U
1972578
1972619 01000E007A040000
Chai
39 I
1972491
1972578 060011006A040000

Vous pouvez galement utiliser loption VERSIONS dans une sous-requte dans
les ordres SQL de type LMD ou LDD .

14-28

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions

Atelier 14
Atelier 14

Les transactions

Dbut et fin de transaction

Structuration de la transaction

Dure : 15 minutes
TSOFT - ORACLE 10g SQL et PL*SQL

Module 14 : Les transactions

Questions
14-1.

L'administrateur de la base de donnes peut-il voir les donnes en train d'tre


modifies dans une transaction par les utilisateurs de la base ?

14-2.

Peut-on annuler partiellement une transaction ?

14-3.

Quel est le mode de verrouillage par dfaut dans Oracle ?


A. Enregistrement
B. Table
C. Segment
D. Page des donnes

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

Eyrolles/Tsoft SQL pour Oracle10g

14-29

Module 14 : Les transactions


14-6.

Pour les mmes choix que la question prcdente, quelles sont les
commandes SQL qui valident automatiquement une transaction ?

14-7.

Quelle doit tre la valeur de la colonne SALARY aprs l'excution du script


suivant ?

SQL> SELECT FIRST_NAME, LAST_NAME, SALARY


2 FROM HR.EMPLOYEES
3 WHERE EMPLOYEE_ID = 200;
FIRST_NAME
LAST_NAME
SALARY
-------------------- ------------------------- ---------Jennifer
Whalen
4400
SQL> UPDATE HR.EMPLOYEES SET SALARY=6000
2 WHERE EMPLOYEE_ID = 200;
1 ligne mise jour.
SQL> DROP TABLE SCOTT.EMP;
Table supprime.
SQL> ROLLBACK;
Annulation (rollback) effectue.
SQL> SELECT FIRST_NAME, LAST_NAME, SALARY
2 FROM HR.EMPLOYEES
3 WHERE EMPLOYEE_ID = 200;
FIRST_NAME
LAST_NAME
SALARY
-------------------- ------------------------- ---------Jennifer

14-8.

Whalen

Quelle doit tre la valeur de la colonne SALARY aprs l'excution du script


suivant ?

SQL> SELECT FIRST_NAME, LAST_NAME, SALARY


2 FROM HR.EMPLOYEES
3 WHERE EMPLOYEE_ID = 200;
FIRST_NAME
LAST_NAME
SALARY
-------------------- ------------------------- ---------Jennifer
Whalen
6000
SQL> UPDATE HR.EMPLOYEES SET SALARY=8000
2 WHERE EMPLOYEE_ID = 200;
1 ligne mise jour.
SQL> TRUNCATE TABLE SCOTT.EMP;
TRUNCATE TABLE SCOTT.EMP
*
ERREUR la ligne 1 :

14-30

Eyrolles/Tsoft SQL pour Oracle10g

Module 14 : Les transactions


ORA-00942: Table ou vue inexistante
SQL> ROLLBACK;
Annulation (rollback) effectue.
SQL> SELECT FIRST_NAME, LAST_NAME, SALARY
2 FROM HR.EMPLOYEES
3 WHERE EMPLOYEE_ID = 200;
FIRST_NAME
LAST_NAME
SALARY
-------------------- ------------------------- ---------Jennifer

14-9.

Whalen

Quelle doit tre la valeur de la colonne SALARY aprs l'excution du script


suivant ?

SQL> UPDATE HR.EMPLOYEES SET SALARY=5000


2 WHERE EMPLOYEE_ID = 200;
1 ligne mise jour.
SQL> SAVEPOINT SP1;
Savepoint cr.
SQL> UPDATE HR.EMPLOYEES SET SALARY=6000
2 WHERE EMPLOYEE_ID = 200;
1 ligne mise jour.
SQL> ROLLBACK TO SAVEPOINT SP1;
Annulation (rollback) effectue.
SQL> SELECT FIRST_NAME, LAST_NAME, SALARY
2 FROM HR.EMPLOYEES
3 WHERE EMPLOYEE_ID = 200;
FIRST_NAME
LAST_NAME
SALARY
-------------------- ------------------------- ---------Jennifer

Exercice n 1

Whalen

Les transactions

Effacez les commandes effectues par lemploy numro trois.


Lopration sest-elle droule correctement ? Justifiez votre rponse.
Crez deux nouvelles catgories de produits, une 'Boissons non
alcoolises' et une autre 'Boissons alcoolises'; aprs la cration,
insrez un point de sauvegarde POINT_REPERE_1.

Eyrolles/Tsoft SQL pour Oracle10g

14-31

Module 14 : Les transactions


Attribuez les produits 1 et 43 la catgorie numro 10 et insrez un point de
sauvegarde POINT_REPERE_2.
Attribuez les produits (2, 24, 34, 35, 38, 39, 67) la deuxime catgorie
et insrez un point de sauvegarde POINT_REPERE_3.
Supprimez la catgorie de produits 'Boissons'.
Lopration sest droule correctement ?
Annulez les oprations depuis le point de sauvegarde POINT_REPERE_2.
Excutez la commande ROLLBACK TO SAVEPOINT POINT_REPERE_3 ;
Justifiez le message derreur.
Attribuez tous les produits qui sont encore de catgorie Boissons la deuxime
catgorie, Boissons alcoolises ; insrez un point de sauvegarde
POINT_REPERE_3.
Supprimez la catgorie de produits Boissons .
Affichez les produits ainsi que les deux catgories qui sont lobjet de cette transaction.
Validez la transaction.
Affichez les enregistrements actuels de la table CATEGORIES. Affichez les
enregistrements de la table CATEGORIES telles qu'elles taient une heure auparavant.

14-32

Eyrolles/Tsoft SQL pour Oracle10g

Вам также может понравиться