Qu'est-ce que Transaction ?

Série d'opérations sur une base de données traitée comme une seule unité. COMMIT rend les résultats définitifs, et ROLLBACK ramène les données à leur état d'avant le début de la transaction. Le SGBD gère les transactions au moyen de verrous et de journaux pour qu'elles satisfassent l'atomicité, la cohérence, l'isolation et la durabilité (propriétés ACID).

Nom japonais: トランザクション

« Transaction » apparaît dans 13 questions d'entraînement réparties sur 1 thèmes, dont Bases des bases de données.

Domaine: Bases des bases de données

COMMIT et ROLLBACK

Dans un virement entre comptes, le résultat n'est correct que lorsque le débit du compte A et le crédit du compte B ont tous deux été effectués. Une transaction regroupe une telle série d'opérations en une seule unité : exécuter COMMIT à la fin rend les résultats définitifs, et exécuter ROLLBACK, par exemple lorsqu'une erreur survient en cours de route, annule toutes les mises à jour de la transaction. Les mises à jour non validées sont aussi annulées en cas de panne, si bien qu'il ne reste jamais d'état intermédiaire où seule une partie des mises à jour aurait été appliquée.

Contrôle de concurrence

Lorsque de nombreux utilisateurs accèdent en même temps à une base de données, plusieurs transactions lisent et écrivent les mêmes données. Sans aucun contrôle, des problèmes surviennent : une mise à jour peut en écraser et en faire perdre une autre (mise à jour perdue), ou une transaction peut lire des données non validées (lecture sale). Le SGBD évite les interférences entre transactions par un contrôle de concurrence fondé sur des verrous partagés et exclusifs, ou par le contrôle de concurrence multiversion (MVCC), qui conserve les versions antérieures des données pour les lectures. Le degré d'interférence à éviter se choisit avec le niveau d'isolation.

Reprise après panne

Le SGBD enregistre dans un journal les valeurs avant et après des mises à jour, et écrit ce journal sur le support de stockage avant la base de données elle-même. Après une panne, il utilise le journal pour rejouer les mises à jour des transactions validées (rollforward) et annuler celles des transactions non validées (rollback), ce qui restaure un état correct. Prendre régulièrement des points de contrôle (checkpoints) réduit la portion du journal à parcourir lors de la reprise.

S'entraîner : questions sur Transaction

Sur une table Compte, on démarre une transaction et l'on exécute un UPDATE qui retire 300 du solde du compte A et un UPDATE qui ajoute 300 au solde du compte B. On exécute ensuite ROLLBACK au lieu de COMMIT. Qu'advient-il de la table Compte ?

  1. ASeul l'ajout au compte B est annulé ; le retrait du compte A subsiste
  2. BLes 2 UPDATE sont annulés, et la table revient à son état d'avant le début de la transaction
  3. CComme les UPDATE ont déjà été exécutés, aucun n'est annulé
Afficher la réponse et l'explication

Réponse : B. Les 2 UPDATE sont annulés, et la table revient à son état d'avant le début de la transaction

Une transaction est un mécanisme qui traite une série d'opérations sur une base de données comme une seule unité. Les mises à jour effectuées dans une transaction deviennent définitives à l'exécution de COMMIT, et sont toutes annulées à l'exécution de ROLLBACK, les données revenant à leur état d'avant le début de la transaction. Dans cet exemple, le retrait du compte A et l'ajout au compte B sont tous deux annulés, et les 2 soldes restent inchangés. Si une erreur survient au milieu d'un virement, un ROLLBACK garantit qu'il ne reste pas d'état intermédiaire où un seul compte aurait été mis à jour. Pour n'annuler qu'une partie du travail, on peut marquer un point avec SAVEPOINT et y revenir avec ROLLBACK TO SAVEPOINT.

Parmi les propriétés ACID qu'une transaction doit posséder, laquelle garantit qu'un virement qui débite le compte A et crédite le compte B est soit effectué entièrement, soit pas du tout, même si une panne survient en cours de route ?

  1. ALa cohérence (Consistency)
  2. BLa durabilité (Durability)
  3. CL'atomicité (Atomicity)
Afficher la réponse et l'explication

Réponse : C. L'atomicité (Atomicity)

Les propriétés ACID tirent leur nom des initiales de 4 propriétés qu'une transaction doit satisfaire. L'atomicité (Atomicity) signifie que les opérations d'une transaction sont soit toutes exécutées, soit aucune ; en cas de panne, les mises à jour déjà effectuées sont annulées. La cohérence (Consistency) signifie que les données continuent de satisfaire les contraintes d'intégrité (soldes jamais négatifs, clés étrangères faisant toujours référence à des lignes existantes, etc.) avant et après la transaction. L'isolation (Isolation) signifie que des transactions exécutées simultanément n'interfèrent pas entre elles et produisent le même résultat que si elles avaient été exécutées l'une après l'autre. La durabilité (Durability) signifie que les résultats d'une transaction validée ne sont pas perdus, même si une panne survient ensuite. La propriété du « tout ou rien » évoquée dans la question est l'atomicité.

Questions fréquentes

Que se passe-t-il si une erreur survient au milieu d'une transaction ?

Soit l'application exécute ROLLBACK, soit le SGBD effectue une reprise après panne, et toutes les mises à jour de cette transaction sont annulées. Il ne reste jamais seulement une partie des mises à jour.

Quels problèmes pose une transaction longue ?

Elle détient des verrous pendant longtemps : les autres transactions attendent, on peut traiter moins de travail simultanément, et les interblocages deviennent plus probables. En règle générale, une transaction doit rester aussi courte que le permet le maintien de la cohérence.

« Transaction » dans les explications

Questions mentionnant « Transaction » (13)

  1. Sur une table Compte, on démarre une transaction et l'on exécute un UPDATE qui retire 300 du solde du compte A et un UPDATE qui ajoute 300 au solde du compte B. On exécute ensuite ROLLBACK au lieu de COMMIT. Qu'advient-il de la table Compte ?
  2. Parmi les propriétés ACID qu'une transaction doit posséder, laquelle garantit qu'un virement qui débite le compte A et crédite le compte B est soit effectué entièrement, soit pas du tout, même si une panne survient en cours de route ?
  3. La quantité en stock d'un produit dans une table Stock vaut 10. La transaction T1 lit la quantité en stock et réécrit cette valeur moins 3, et T2 lit la quantité en stock et réécrit cette valeur moins 5. Si elles s'exécutent sans poser de verrou, dans l'ordre lecture de T1, lecture de T2, écriture de T1, écriture de T2, quelle est la quantité en stock finale ?
  4. Parmi les problèmes qui surviennent lorsque des transactions s'exécutent simultanément, quelle description d'une lecture sale (dirty read) est correcte ?
  5. La transaction T1 a exécuté SELECT COUNT(*) FROM Commande WHERE Montant >= 1000 et a obtenu 8. Juste après, T2 a inséré une ligne de commande d'un montant de 2000 et l'a validée. Lorsque T1 a exécuté de nouveau la même instruction SELECT, elle a obtenu 9. De quel phénomène s'agit-il ?
  6. La transaction T1 détient un verrou partagé sur une ligne et la lit. Sur la même ligne, T2 demande un verrou partagé et T3 un verrou exclusif. Quelle affirmation est correcte pour la période qui précède la libération du verrou par T1 ?
  7. Quelle proposition décrit correctement le verrouillage à deux phases (2PL), utilisé pour le contrôle de concurrence des transactions ?
  8. La transaction T1 a posé un verrou exclusif sur la ligne A puis demandé un verrou sur la ligne B, tandis que T2 a posé un verrou exclusif sur la ligne B puis demandé un verrou sur la ligne A ; aucune ne peut donc progresser. Que fait généralement un SGBD lorsqu'il détecte cette situation ?
  9. On considère les transactions T1 à T5 ; un point de contrôle (checkpoint) a été pris une fois avant qu'une panne ne survienne. T1 a démarré et a été validée avant le point de contrôle. T2 et T3 ont démarré avant le point de contrôle ; T2 a été validée après le point de contrôle mais avant la panne, et T3 n'était pas validée au moment de la panne. T4 et T5 ont démarré après le point de contrôle ; T4 a été validée avant la panne, et T5 ne l'était pas. Lors de la reprise après la panne, quelles transactions faut-il rejouer (rollforward) à l'aide du journal ?
  10. Les instructions SQL se répartissent en langage de définition de données (DDL), langage de manipulation de données (DML) et langage de contrôle de données (DCL). Laquelle relève du DDL ?
  11. Quel est le résultat de l'exécution en SQL de DELETE FROM Employe sans clause WHERE ?
  12. Parmi les niveaux d'isolation définis par la norme SQL, quelle combinaison indique correctement les phénomènes qui peuvent se produire avec READ COMMITTED ?
  13. Lors de la mise à jour des données, de nombreux SGBD enregistrent les modifications dans un journal (log) et écrivent ce journal sur un support de stockage non volatil avant la base de données elle-même (WAL : journalisation à écriture anticipée, write-ahead logging). Quelle est la principale raison de cette approche ?

Termes associés

SQL Niveau d'isolation Propriétés ACID Interblocage (deadlock) Clé étrangère (foreign key) Verrouillage à deux phases (2PL) Vue (view) Index (index de base de données) Base de données relationnelle Clé primaire

Retour au glossaire