Académique Documents
Professionnel Documents
Culture Documents
1. Soit une base de données contenant la table val dont la définition est: (a int, b int).
La table contient un unique tuple (1,2). Nous considérons qu'il y a 2 clients C1 et
C2. C1 lance les séquences d'ordres suivantes avec le mode de confirmation
automatique non activé. Le client C2 est également connecté. Nous nous
intéressons à la vue de chaque client. Remplir les tableaux suivants et vérifier par
la suite sur les postes avec postgresql.
1.a
Ordre de C1 Val vue par C1 Val vue par C2
begin transaction;
insert into val values(3,4)
insert into val values (1,2)
rollback;
1.b
Ordre de C1 Val vue par C1 Val vue par C2
begin transaction;
insert into val values(3,4)
commit;
1.c
2.a) Si la valeur initiale de a est 25 et celle de b est 25, quelles sont leurs valeurs de a et
b si on exécute les transactions à la suite, T1 puis T2.
2.b) Quelles sont les valeurs si on exécute T2 puis T1?
2.c) maintenant les deux transactions sont exécutées de façon concurrente de la façon
suivante:
Transaction T1 Transaction T2
Read (a)
a:=a+100;
write(a);
Read (a)
a:=a*2;
write(a);
read(b)
b:=b+100;
write(b);
read(b)
b:=b*2;
write(b);
Si on considère les mêmes valeurs initiales qu'en a) quelles sont les valeurs de a et b à
l'issue de l'exécution des transactions? Cette exécution entremêlée est elle correcte,
pourquoi?
2.d) Si les deux transactions sont exécutées de façon concurrente de la façon suivante:
Transaction T1 Transaction T2
Read (a)
a:=a+100;
write(a);
Read (a)
a:=a*2;
write(a);
read(b)
b:=b*2;
write(b);
read(b)
b:=b+100;
write(b);
Si on considère les mêmes valeurs initiales qu'en a) quelles sont les valeurs de a et b à
l'issue de l'exécution des transactions?
3.
Notre système utilise le protocole de verrous exclusifs avec libération explicite.
Supposons l'exécution suivante
des transactions T1 et T2:
Transaction T1 Transaction T2
t1 XRead (a)
t2 a:=a+100; XRead (a)
t3 mise en attente
t4 write(a);
t5
t6 XRelease (a) a:=a*2;
t7 write(a);
t8 XRelease (a)
t9
t10 Xread(b)
t11 b:=b+100; Xread(b)
t12 mise en attente
t13 write(b);
t14
t15 XRelease (b) b:=b*2;
t16 write(b);
t17 XRelease (b)
Cette exécution se passe t'elle correctement? Quels sont les problèmes possibles en cas
d'échec de T1?