A/ Présentation

Transcription

A/ Présentation
Université du Havre, Licence Pro DA2I, ABD, TP4, 10/1/2008,
Enseignants : Nakechbandi M, Thème : Transaction, accès concurrentiel.
A/ Présentation
Vous pouvez travailler seul ou par binôme en ouvrant plusieurs sessions SQL+ et en redimensionnant toutes
les fenêtres afin qu'elles soient toutes visibles.
Respectez scrupuleusement l'ordre des commandes indiquées, en particulier les commit et rollback. Avant et
après chaque expérience, inscrivez le contenu T dans la table prévue à cet effet, vous en aurez besoin pour
repartir d'une expérience précédente, et aussi pour confronter les résultats fournis par Oracle avec vos
propres prévisions.
Mise en place de la table R : Script à récupérer sur (http://tamlehavre.free.fr/lp_da2i/)
create table R (a Number
insert into R values (0,
insert into R values (2,
insert into R values (0,
select * from R ;
grant all on R to public
commit ;
/
(5), b Number 5));
0) ;
3) ;
1) ;
;
B/ Travail à faire (Le sujet est disponible en format pdf au http://tamlehavre.free.fr/lp_da2i/)
Expérience 1.
R avant Expérience 1
R après
session 1 T0
select * from R;
insert into R values (10,20);
scn (a b)
(0 0)
(2 3)
select * from R;
(0 1)
session 2 T1 ; T2
select * from R;
update R set A=A+1;
select * from R;
ALTER TABLE r MODIFY a number(6);
scn (a b)
commit;
select * from R;
select * from R;
Que se passe-t-il pour le deuxième select de T2
Expérience 2.
R avant Expérience 2
R après
session 1 T3 ; T5
session 2 T4 ; T6
update R set A=A+1;
select * from R;
scn (a b)
scn (a b)
select * from R;
delete from R where A=2;
delete from R where A=1;
commit;
select * from R;
commit;
commit;
select * from R;
commit;
Que se passe-t-il pour le deuxième delete de T4 ? pourquoi ?
1
Expérience 3.
Expérience 3
R avant
session 1 T7
update R set A=A+1;
select * from R;
scn (a b)
R après
session 2 T8
set transaction isolation
level Serializable;
insert into R values (4,5); insert into R values (33,77);
select * from R;
select * from R;
delete from R where A=4;
commit;
rollback;
scn (a b)
Pourquoi le delete de session 2 échoue-t-il avec une erreur ?
Pourquoi termine-t-on cette transaction par un rollback ?
Vérifier que l'insertion dans la table R est ineffective.
Expérience 4.
Les interblocages
R avant
Expérience 4
R après
session 1 T9
session 2 T10
update R set A=4 where A=3;
update R set B=2 where B=3; scn (a b)
scn (a b)
select * from R;
select * from R;
update R set A=14 where A=3;
update R set B=9 where B=3;
rollback;
commit;
Pourquoi le premier update de T10 ne se bloque-t-il pas ?
Pourquoi Oracle détecte-t-il un interblocage lors du second update de T9 ?
Pourquoi effectue-t-on un rollback pour terminer T10 ?
Expérience 5.
L'instruction select dispose de la clause optionnelle for update. L'expérience suivante va vous permettre de
comprendre son utilité.
R avant
Expérience 5
session 1 T11 ; T13
select * from R where 1=0
for update;
R après
session 2 T12 ; T14 ; T15
lock table R in exclusive mode;
scn (a b)
commit;
commit;
scn (a b)
select * from R where B=7
for update;
update R set B=10 where B=0;
select * from R;
update R set A=6 where A=5;
update R set B=6 where B=7;
commit;
commit;
2
select * from R;
commit;
Expliquer les blocages de T12 et T14.
Quelle est la granularité des verrouillages effectués par select...for update : table et/ou ligne ?
Expérience 6.
Le mode Read-Only
R avant
Expérience 6
session 1 T16 ; T19
session 2
set transaction read only;
select * from R;
select *
scn (a b)
update R
commit;
select * from R;
select *
update R
commit;
select * from R;
select *
commit;
commit;
R après
T17 ; T18
from R;
scn (a b)
set A=A+1;
from R;
set A=A+1;
from R;
Quel problème est résolu ? Comment est-il résolu ?
Expérience 7.
Comprendre la commande lock table
R avant
Expérience 7
session 1 T22 ; T24 ; T26
lock table R in share mode;
R après
session 2 T23 ; T25 ; T27
select * from R for update;
update R set A=A+1;
scn (a b)
commit;
lock table R in exclusive mode;
commit;
select * from R;
select * from R for update;
scn (a b)
commit;
commit;
lock table R in exclusive mode;
lock table R in
exclusive mode nowait;
commit;
commit;
Y a-t-il un bug dans Oracle ? Comment expliquez-vous ces résultats ?
3

Documents pareils