TRANSACTION Problèmes posés Que se passe-t-il si une panne intervient au milieu d’un ordre DELETE (ou UPDATE ou INSERT) ? Que se passe-t-il si une panne intervient au milieu d’opérations indissociables comme débit/crédit ? Comment garantir quand on fait une réservation que la dernière place n’est pas prise en simultané par quelqu’un d’autre ?
Exemple d’opérations indissociables Soit la table COMPTE(nom, solde) dans une banque UPDATE compte SET solde = solde – 1000 WHERE nom = ‘Grand Mère’; SET solde = solde + 1000 WHERE nom = ‘Moi’;
Définition d’une transaction Une transaction est une suite d'opérations effectuées comme une seule unité logique de travail. Une transaction est exécutée en tout ou rien. Si elle n’aboutit pas, aucune modification n’est prise en compte.
Lancer une transaction Transaction implicite Début de la transaction = démarrage du logiciel Début de la transaction = fin de la transaction précédente Transaction explicite sur SQLServer, PostgreSQL BEGIN TRANSACTION
Fin d’une transaction Valider la transaction Commande COMMIT Annuler la transaction Erreur en cours de transaction : pb de place disque… Commande ROLLBACK Annulation possible grâce au segment UNDO
Problèmes de concurrence Règlés par la notion de transaction
Les verrous LOCK Mécanisme interne de mise en œuvre des transactions Verrous exclusifs Verrous partagés Granularité du verrouillage base, table, ligne, page