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/







