TPS2
This commit is contained in:
parent
356d24ff77
commit
abbc31c8a1
125
BDD2_TPS2.sql
Normal file
125
BDD2_TPS2.sql
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
select distinct sid from v$mystat ;
|
||||||
|
//1256
|
||||||
|
|
||||||
|
CREATE TABLE Donnees_HuRa (
|
||||||
|
nom VARCHAR2(5),
|
||||||
|
valeur NUMBER
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO Donnees_HuRa (nom, valeur) VALUES ('A', 0);
|
||||||
|
INSERT INTO Donnees_HuRa (nom, valeur) VALUES ('B', 0);
|
||||||
|
INSERT INTO Donnees_HuRa (nom, valeur) VALUES ('C', 0);
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur + 1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
|
||||||
|
SELECT nom, valeur
|
||||||
|
FROM Donnees_HuRa
|
||||||
|
WHERE nom = 'A'
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//1/
|
||||||
|
|
||||||
|
//1)
|
||||||
|
//WAITING_SESSION HOLDING_SESSION LOCK_TYPE MODE_HELD MODE_REQUESTED LOCK_ID1 LOCK_ID2
|
||||||
|
//--------------- --------------- -------------------------- ---------------------------------------- ---------------------------------------- ---------- ----------
|
||||||
|
// 1281 1256 Transaction Exclusive Exclusive 131073 406793
|
||||||
|
// 1244 1260 Transaction Exclusive Exclusive 262146 509268
|
||||||
|
// 1270 1277 Transaction Exclusive Exclusive 720904 692919
|
||||||
|
|
||||||
|
//2)
|
||||||
|
|
||||||
|
//holding et waiting session : les session concernée par l'action
|
||||||
|
|
||||||
|
//3)
|
||||||
|
//oui
|
||||||
|
|
||||||
|
//2/
|
||||||
|
|
||||||
|
//1)
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur +1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
//le phénomène mis en évidence est de lecture non répétable
|
||||||
|
|
||||||
|
//2)
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur +1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'B';
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur +1
|
||||||
|
WHERE nom = 'B';
|
||||||
|
|
||||||
|
//t1 : les valeurs de A et B sont 3 et 0
|
||||||
|
//t2 : problème avec l'update, elle attends que user 2 libère le tableau, pour mettre à jour : deadlock
|
||||||
|
//la startégie utiliser par oracle, consiste à détecter les deadlock, puis annule une des transactions, et libère les verroux
|
||||||
|
|
||||||
|
//3)
|
||||||
|
|
||||||
|
SELECT nom, valeur
|
||||||
|
FROM Donnees_HuRa
|
||||||
|
WHERE nom = 'A'
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur+1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
COMMIT;
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
//t1 : la valeur C à été mis à jour
|
||||||
|
//t2 : la commande subit un deadlock, dû au select for update
|
||||||
|
|
||||||
|
//3/
|
||||||
|
//1)
|
||||||
|
SET TRANSACTION READ ONLY;
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
COMMIT;
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
//t1 : A = 0
|
||||||
|
//t2 : A = 0
|
||||||
|
//t3 : A = 0
|
||||||
|
//t4 : A = 2
|
||||||
|
//Il y a que deux représentations de A
|
||||||
|
|
||||||
|
//2)
|
||||||
|
|
||||||
|
SET TRANSACTION READ ONLY;
|
||||||
|
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
COMMIT;
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
//Car la session n'as pas fait de commit
|
||||||
|
|
||||||
|
//4/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
74
user2.sql
Normal file
74
user2.sql
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
select distinct sid from v$mystat ; //1281
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur + 1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
|
||||||
|
//2/
|
||||||
|
|
||||||
|
//1)
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur +1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
//2)
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur +1
|
||||||
|
WHERE nom = 'B';
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'B';
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur +1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
|
||||||
|
//3)
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur +1
|
||||||
|
WHERE nom = 'C';
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur +1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'C';
|
||||||
|
|
||||||
|
//3/
|
||||||
|
|
||||||
|
//1)
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur+1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur+1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
//2)
|
||||||
|
|
||||||
|
UPDATE Donnees_HuRa
|
||||||
|
SET valeur = valeur+1
|
||||||
|
WHERE nom = 'A';
|
||||||
|
SELECT nom, valeur FROM Donnees_HuRa WHERE nom = 'A';
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user