This commit is contained in:
Hugo RABAN 2025-01-24 16:15:26 +01:00
parent 356d24ff77
commit abbc31c8a1
2 changed files with 199 additions and 0 deletions

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 à é mis à jour
//t2 : la commande subit un deadlock, 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

@ -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;