Les transactions Oracle
Le SGBD garantit qu'une suite d'opérations s'exécute parfaitement et complètement, ou pas du tout. C'est l'essence d'ACID.
1. Notion de transaction
Une opération d'une transaction est donc au choix un ordre INSERT, UPDATE ou DELETE.
L'exemple canonique du cours — MLD vente
Facture(id, #idProduit, #IdClient, Qte, DateFact, montant)
Produit(id, stock, prixUnitaire)
Client(id, nom, prenom, caCumule)
Une vente d'un produit nécessite trois opérations :
Une vente est cohérente si et seulement si les trois opérations sont effectuées.
Si l'
INSERT dans Facture réussit mais l'UPDATE Client échoue → le SGBD annule l'INSERT. La base reste cohérente.
2. ACID — les 4 propriétés
Une transaction vérifie les quatre propriétés ACID :
| Lettre | Propriété | Définition |
|---|---|---|
| A | Atomicité | Une transaction doit soit être complètement validée, soit complètement annulée. |
| C | Cohérence | Une transaction ne peut pas laisser la base dans un état incohérent. |
| I | Isolation | Une transaction ne peut voir aucune autre transaction en cours d'exécution. |
| D | Durabilité | Après que le client a été informé du succès, les résultats ne disparaîtront pas (même crash serveur). |
Tous les SGBD relationnels possèdent ces 4 propriétés de façon native. Pas besoin de les implémenter — Oracle, PostgreSQL, MySQL (InnoDB), SQL Server… tous ACID par défaut.
Mnémo manuscrit pour la feuille recto-verso
Cohérence · contraintes respectées
Durabilité · écrit dans le marbre
3. Mise en œuvre d'une transaction
SGBD, instance et session
| SGBD | Logiciel qui gère des bases de données. |
| Instance | Ensemble de ressources mémoires + logicielles qui rend accessible une BD à plusieurs utilisateurs. |
| Session | Permet à un utilisateur de se connecter à une instance pour exécuter des instructions SQL. |
Cycle de vie d'une transaction
Le cycle de vie : début → opérations → commit (validée) ou rollback (annulée).
Cohérence et panne serveur
Isolation lors d'un SELECT
- Données déjà validées dans les transactions précédentes
- Données créées/MAJ dans la transaction courante
- Données détruites par d'autres transactions en cours
- Données détruites définitivement et validées
- Données détruites dans la transaction courante
- Données créées/MAJ dans d'autres transactions en cours
Isolation renforcée — transaction en lecture seule
-- On ne peut faire que des lectures.
-- Aucune validation d'autres transactions n'affecte les lectures de celle-ci.
SET TRANSACTION READ ONLY;
En
READ ONLY, la transaction lit un instantané de la base au moment où elle commence. Idéal pour des rapports longs qui ne doivent voir aucun changement en cours.
Découpage d'une transaction — savepoint
-- Poser un jalon
SAVEPOINT nom_point;
-- Annuler les opérations depuis le jalon (sans annuler la transaction entière)
ROLLBACK TO SAVEPOINT nom_point;
Un savepoint marque un état intermédiaire. Le ROLLBACK TO SAVEPOINT annule uniquement les opérations qui suivent le jalon — la transaction reste vivante.
- Un jalon ne disparaît qu'à la fin de la transaction (commit/rollback total).
- Plusieurs jalons possibles dans une même transaction.
4. Gestion d'accès concurrentiels
Le principe de transaction crée un nouveau problème :
Exemple du cours
CREATE TABLE nombre (n number);
INSERT INTO nombre VALUES (1); COMMIT;
-- Transaction 1 (au temps t1)
UPDATE nombre SET n = 2 WHERE n = 1;
-- Transaction 2 (au temps t2)
UPDATE nombre SET n = 4 WHERE n = 1;
L'ordre de T2 n'a pas le même sens selon que T1 est validée ou annulée :
L'
UPDATE de T2 ne concerne aucune ligne → l'unique élément vaut 2.
L'
UPDATE de T2 trouve n=1 → l'unique élément vaut 4.
Verrouillage et blocage
- Chaque MAJ d'une ligne provoque le verrouillage de la ligne.
- Le verrou est annulé à la fin de la transaction qui l'a posé.
- Chaque MAJ sur une ligne verrouillée provoque le blocage temporaire de la transaction qui tente la modification.
- Le blocage est annulé à la fin de la transaction qui détient le verrou.
Interblocage (deadlock)
L'étreinte fatale : T1 attend L2 (détenue par T2), T2 attend L1 (détenue par T1). Aucune ne peut avancer.
Comment Oracle résout l'interblocage
- Oracle détecte l'interblocage.
- T2 reste bloquée.
- La MAJ de L2 par T1 est annulée, T1 est débloquée.
Le problème est résolu — mais au prix d'annuler une opération. C'est le moindre mal.
5. OLTP — Online Transaction Processing
- OLTP est une architecture de programme permettant de gérer des transactions en temps réel et leurs problèmes associés.
- Applications typiques : réservation de billets de train, bourse, e-commerce.
- Tous les SGBD relationnels dignes de ce nom ont une architecture OLTP.
Deux clients tentent de réserver le même siège au même moment. OLTP + verrouillage garantit qu'un seul obtient le siège, sans incohérence.
6. Divers : schémas et synonymes
Synonymes
Pour faciliter l'utilisation d'un objet de la base par un autre utilisateur que son créateur, on crée des synonymes :
CREATE PUBLIC SYNONYM nom_synonyme FOR nom_complet_objet;
Schémas
On peut découper une BD en plusieurs parties à des fins de cohérence et d'optimisation : on crée des schémas. Un schéma est associé à un utilisateur et a le même nom que cet utilisateur.
CREATE SCHEMA AUTHORIZATION nom_schema
Liste de tables
Liste de vues
Liste de synonymes
Liste de droits pour d'autres utilisateurs
…
;
★ Réviser le chapitre
Pour vérifier ta compréhension
Réponds dans ta tête, puis déplie pour vérifier.
Pourquoi une vente de produit nécessite-t-elle une transaction ?
Parce qu'elle implique trois opérations interdépendantes (INSERT Facture, UPDATE Produit.stock, UPDATE Client.caCumule). Si seule une partie réussit, la base est incohérente : facture émise sans stock décrémenté, ou stock décrémenté mais CA pas mis à jour. La transaction garantit le « tout ou rien ».
Quelle est la différence entre ROLLBACK et ROLLBACK TO SAVEPOINT ?
ROLLBACK seul annule toute la transaction depuis son début et la termine. ROLLBACK TO SAVEPOINT j1 n'annule que les opérations postérieures au jalon j1 ; la transaction reste vivante et peut continuer.
Lors d'un SELECT, vois-tu les modifications d'une autre transaction en cours ?
Non — c'est la propriété d'isolation. Tu vois les données validées avant ta transaction + tes propres modifications + les destructions en cours dans d'autres transactions (qui peuvent encore être annulées). Tu ne vois pas les créations/MAJ encore en cours dans d'autres transactions.
Quand utilise-t-on SET TRANSACTION READ ONLY ?
Pour des rapports longs qui doivent voir un instantané cohérent de la base. Pendant la transaction, aucun changement validé par d'autres ne sera visible. C'est plus simple et plus performant que de bloquer toute la base.
Que fait Oracle face à un interblocage ?
Oracle détecte l'interblocage et annule l'une des opérations qui ont créé l'étreinte fatale (typiquement, celle de la transaction « la plus jeune »). La transaction concernée est ainsi débloquée mais a perdu une opération qu'il faudra peut-être rejouer.
🃏 Flashcards éclair
Clique pour retourner.
ACID
Les 4 propriétés d'une transaction ?
tourne →Atomicité
Définition courte.
tourne →Isolation
Définition courte.
tourne →Début / fin transaction
Quand commence-t-elle ? Quand finit-elle ?
tourne →Finit :
commit (validation) ou rollback (annulation).
Lecture seule
Syntaxe.
tourne →SET TRANSACTION READ ONLY;Savepoint
Poser un jalon + y revenir.
tourne →SAVEPOINT j1;
ROLLBACK TO SAVEPOINT j1;Verrou
Quand est-il posé / libéré ?
tourne →Libéré : à la fin de la transaction qui l'a posé.
Interblocage
Définition en une phrase.
tourne →Oracle & deadlock
Comment résout-il ?
tourne →OLTP
Définition + exemple.
tourne →Ex : SNCF, bourse, e-commerce.
Synonyme
Syntaxe Oracle.
tourne →CREATE PUBLIC SYNONYM nom FOR objet;Schéma
Lien avec utilisateur ?
tourne →✎ Quiz éclair
commit/rollback précédent.ROLLBACK TO SAVEPOINT j1 :commit ou rollback total de la transaction qui l'a posé.📌 Pour la feuille recto-verso
- ACID : Atomicité · Cohérence · Isolation · Durabilité — natif tous SGBD-R
- Transaction démarre : début session OU fin précédente · Finit :
commitourollback - Cohérence garantie même en cas de panne serveur (reprise au démarrage)
- Isolation : tu ne vois pas les MAJ d'autres transactions en cours
SET TRANSACTION READ ONLY;= lecture seule consistanteSAVEPOINT j1;+ROLLBACK TO SAVEPOINT j1;= découpage- Verrou ligne posé à chaque MAJ, libéré à la fin de la transaction
- Interblocage = T1 attend L2 (T2), T2 attend L1 (T1) — étreinte fatale
- Oracle résout en annulant une opération d'une transaction
- OLTP = architecture temps réel (SNCF, bourse) — natif Oracle
CREATE PUBLIC SYNONYM nom FOR objet;- Schéma = associé à un utilisateur, même nom que lui ·
CREATE SCHEMA AUTHORIZATION