La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Les transactions.

Présentations similaires


Présentation au sujet: "Les transactions."— Transcription de la présentation:

1 Les transactions

2 La notion de transaction
Transaction : il s’agit d’un ensemble d’opérations qui forment un tout indivisible. Elles doivent toutes s’exécuter ou aucune ne doit s’exécuter. Exemple : un client d’une banque transfert 50,000.00$ de son compte d’épargne à son compte de chèque. 2 opérations 1. Retirer 50,000.00$ du compte d’épargnes. Une seule transaction 2. Déposer 50,000.00$ dans le compte chèques.

3 SQL et la notion de transaction
Au cours d’une transaction, l’utilisateur verrouille la/les lignes des tables qui sont modifiées. Si un autre utilisateur veut modifier la ressource pendant qu’elle est verrouillée, le processus de l’utilisateur attend que la ressource se libère. Si un utilisateur veut voir la valeur d’une ressource et que celle-ci est verrouillée, l’utilisateur verra l’ancienne version de la ressource (la version originale de la donnée)

4 Commit Pour confirmer les modifications apportées à la base de données l’utilisateur doit les valider. Par défaut, une modification de la base de donnée doit être validé par la commande COMMIT ou dans certain cas par la sortie explicite du logiciel d’accès (EXIT dans SQL*PLUS). Après une validation, les modifications deviennent accessibles à tous les utilisateurs et les ressources sont libérées.

5 Commit (suite) Transaction
Les modifications deviennent permanentes lors de l’exécution d’un COMMIT. Une transaction, c’est l’ensemble des opérations faites entre 2 COMMIT. Syntaxe : COMMIT; Exemple : INSERT…; DELETE… UPDATE…; Transaction

6 COMMIT implicite Certaines instructions entraînent l'exécution automatique d'un COMMIT ALTER ... AUDIT ... COMMENT ... CONNECT ... CREATE ... DISCONNECT ... DROP ... EXIT GRANT ... NOAUDIT ... QUIT REVOKE ... RENAME ...

7 ROLLBACK ROLLBACK Tous les changements effectués par la transaction active sont annulés Exemple : COMMIT; DELETE * FROM employe; INSERT INTO employe(NoEmp, NomE) VALUES (1010, ‘Toto’); ROLLBACK;

8 Annulation partielle ROLLBACK et SAVEPOINT
SAVEPOINT permet de marquer un endroit dans une transaction où l'on pourrait vouloir revenir. Syntaxe: SAVEPOINT marque pour annuler les changements faits depuis un endroit marqué dans une transaction ROLLBACK TO marque

9 Exemple d’une annulation partielle.
Exemple : DELETE…; COMMIT; UPDATE…; SAVEPOINT Bloc1; ROLLBACK TO Bloc1; Enregistre le UPDATE…;

10 Accès concurrents On dit qu’il y a accès concurrent lorsque plusieurs utilisateurs accèdent aux même données. La base de données doit être protégée des interférences qui peuvent résulter des accès simultanés de deux usagers. Exemple : si deux usagers font des retrait d’un même compte en même temps, le solde final devra tenir compte des deux transactions.

11 Verrouillage Le SGBD utilise un système de verrouillage pour protéger les données tant que la transaction d’un usager n’est pas finie. La transaction qui a posée le verrou peut utiliser les données tandis que les autre transactions sont en attente. Il existe des verrous au niveau des lignes d’une table et au niveau d’une table en entier. Le verrouillage peut être implicite (le SGBD le fait automatiquement) ou explicite (commande LOCK).

12 Verrouillage implicite
Les instructions INSERT, UPDATE ou DELETE pose automatiquement un verrou exclusif de ligne sur la table. Il est alors possible de consulter les anciennes valeurs par un SELECT mais aucunes modification de ces lignes n’est permise. L’instruction SELECT ne pose pas de verrou. Pour réserver, dans le cas d’une mise à jour ultérieur, on peut utiliser le verrou SELECT … FOR UPDATE; Les commandes COMMIT ou ROLLBACK annule les verrous d’une transaction.

13 Exemple de verrou SELECT * FROM employe WHERE id = 1010;
Utilisateur 1 Utilisateur 2 Commentaire SELECT * FROM employe WHERE id = 1010; Les deux voient la même chose. DELETE employe WHERE id = 1010; L’usager 1 ne voit plus l’employé L’usager 2 voit l’employé 1010. Id = 1010; L’usager 2 est mis en attente.

14 Suite de l’exemple de verrou
Utilisateur 1 Utilisateur 2 Commentaire COMMIT; Un message est envoyé à l’usager 2 que la ligne n’existe pas. Les modifications sont enregistrés dans la base de données. Le verrou est défait. SELECT * FROM employe WHERE id = 1010; Les deux ne voient plus l’usager 1010.

15 SELECT … FOR UPDATE Verrouille les lignes sélectionnées. NOWAIT
Retourne le contrôle si une ligne est verrouillée par un autre utilisateur. Exemple SELECT * FROM employe WHERE id= 20 FOR UPDATE NOWAIT;


Télécharger ppt "Les transactions."

Présentations similaires


Annonces Google