Le carnet
Chapitre 3 · encre bordeaux

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.

~ 25 min de lecture TP3 — Cinéma 12 flashcards

1. Notion de transaction

Définition Une transaction est un ensemble ordonné d'opérations modifiant des données (LMD) qu'un SGBD effectuera parfaitement et complètement, ou pas du tout.

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 :

INSERT Facture nouvelle ligne UPDATE Produit.stock décrémenter UPDATE Client.caCumule incrémenter les trois ou aucune — c'est ça, une transaction

Une vente est cohérente si et seulement si les trois opérations sont effectuées.

🧱 Une transaction, c'est tout ou rien.
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 :

LettrePropriétéDéfinition
AAtomicitéUne transaction doit soit être complètement validée, soit complètement annulée.
CCohérenceUne transaction ne peut pas laisser la base dans un état incohérent.
IIsolationUne transaction ne peut voir aucune autre transaction en cours d'exécution.
DDurabilitéAprès que le client a été informé du succès, les résultats ne disparaîtront pas (même crash serveur).
À retenir

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

Atomicité  ·  tout ou rien
Cohérence  ·  contraintes respectées
Isolation  ·  chacun chez soi
Durabilité  ·  écrit dans le marbre

3. Mise en œuvre d'une transaction

SGBD, instance et session

SGBDLogiciel qui gère des bases de données.
InstanceEnsemble de ressources mémoires + logicielles qui rend accessible une BD à plusieurs utilisateurs.
SessionPermet à un utilisateur de se connecter à une instance pour exécuter des instructions SQL.

Cycle de vie d'une transaction

DÉBUT début de session
OU fin de la précédente opérations INSERT · UPDATE · DELETE commit VALIDÉE rollback ANNULÉE ↺ une nouvelle transaction démarre

Le cycle de vie : début → opérations → commit (validée) ou rollback (annulée).

Cohérence et panne serveur

Garantie SGBD Le SGBD garantit la cohérence même en cas de panne serveur. Si la panne se produit pendant la validation ou l'annulation, lors du redémarrage la fin de la transaction est effectuée si possible, sinon la BD est remise dans l'état d'avant la transaction.

Isolation lors d'un SELECT

👁️ Le SGBD AFFICHE
  • 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
🙈 Le SGBD N'AFFICHE PAS
  • 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;
📸 Lecture cohérente
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;
INSERT UPDATE jalon SAVEPOINT j1 DELETE UPDATE INSERT ROLLBACK TO SAVEPOINT j1 … suite de la transaction …

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 :

Question clé Comment gérer la mise à jour d'une même donnée dans deux transactions en cours ? Tant qu'une transaction n'est pas terminée, l'instance ne sait pas si elle sera validée ou annulée.

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 :

Si T1 commit
L'UPDATE de T2 ne concerne aucune ligne → l'unique élément vaut 2.
Si T1 rollback
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)

Transaction 1 détient L1, veut L2 Transaction 2 détient L2, veut L1 Ligne L1 🔒 verrouillée par T1 Ligne L2 🔒 verrouillée par T2 détient détient attend ⏳ attend ⏳ 💀 chacun attend que l'autre finisse

L'étreinte fatale : T1 attend L2 (détenue par T2), T2 attend L1 (détenue par T1). Aucune ne peut avancer.

⚠️ Étreinte fatale (deadlock) T1 verrouille L1, T2 verrouille L2, puis T1 essaie de modifier L2 (bloquée) et T2 essaie de modifier L1 (bloquée). T1 attend la fin de T2 et T2 attend la fin de T1.

Comment Oracle résout l'interblocage

  1. Oracle détecte l'interblocage.
  2. T2 reste bloquée.
  3. La MAJ de L2 par T1 est annulée, T1 est débloquée.
🩹 Compromis Oracle
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.
🚄 Cas d'usage SNCF
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é · Cohérence · Isolation · Durabilité

Atomicité

Définition courte.

tourne →
Une transaction est complètement validée OU complètement annulée. Pas d'état intermédiaire.

Isolation

Définition courte.

tourne →
Une transaction ne voit aucune autre transaction en cours d'exécution.

Début / fin transaction

Quand commence-t-elle ? Quand finit-elle ?

tourne →
Commence : début de session OU fin de la précédente.
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 →
Posé : à chaque MAJ d'une ligne.
Libéré : à la fin de la transaction qui l'a posé.

Interblocage

Définition en une phrase.

tourne →
T1 attend la fin de T2 et T2 attend la fin de T1 — étreinte fatale.

Oracle & deadlock

Comment résout-il ?

tourne →
Détecte → annule une opération d'une des transactions → débloque. Au prix d'une opération perdue.

OLTP

Définition + exemple.

tourne →
Online Transaction Processing : architecture pour transactions temps réel.
Ex : SNCF, bourse, e-commerce.

Synonyme

Syntaxe Oracle.

tourne →
CREATE PUBLIC SYNONYM nom FOR objet;

Schéma

Lien avec utilisateur ?

tourne →
Un schéma est associé à un utilisateur et a le même nom que lui.

✎ Quiz éclair

test rapide · 6 questions
0 / 6
1.Que signifie ACID ?
  • Atomicité · Cohérence · Indexation · Durabilité
  • Authentification · Confidentialité · Intégrité · Disponibilité
  • Atomicité · Cohérence · Isolation · Durabilité
  • Asynchronie · Cohérence · Indépendance · Décentralisation
ACID = Atomicité, Cohérence, Isolation, Durabilité.
2.Quand commence une transaction ?
  • Après un BEGIN TRANSACTION explicite
  • Au début d'une session OU à la fin de la précédente
  • Au premier COMMIT
  • À chaque ordre LMD
Oracle ouvre automatiquement une transaction au début de la session ou juste après le commit/rollback précédent.
3.Un ROLLBACK TO SAVEPOINT j1 :
  • Termine la transaction et annule tout
  • Supprime le jalon j1
  • Annule les opérations postérieures à j1, la transaction continue
  • Libère tous les verrous
Le ROLLBACK TO SAVEPOINT est partiel : il annule depuis le jalon, la transaction reste vivante, les verrous sur les modifications avant le jalon restent.
4.Quand un verrou de ligne est-il libéré ?
  • Immédiatement après la MAJ
  • Au prochain SELECT
  • Après un timeout système
  • À la fin de la transaction qui l'a posé
Le verrou tient jusqu'à commit ou rollback total de la transaction qui l'a posé.
5.Face à un interblocage T1 ↔ T2, Oracle :
  • Attend qu'un timeout système expire
  • Détecte et annule une opération d'une des transactions
  • Crash le serveur
  • Annule les deux transactions
Oracle détecte le deadlock et annule une seule opération pour casser l'étreinte. Une seule transaction est impactée.
6.OLTP signifie :
  • Open Lightweight Transaction Protocol
  • Optimized Locking for Transaction Processing
  • Online Transaction Processing
  • Object-Level Transaction Pattern
OLTP = Online Transaction Processing, architecture pour transactions temps réel.

📌 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 : commit ou rollback
  • 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 consistante
  • SAVEPOINT 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