Une transaction (ensemble d'ordres SQL) est atomique c'est-à-dire qu'elle ne peut se terminer que par un succés
(elle est alors validée) ou un échec (tous ses effets sont alors détruits).
En conséquence, en contexte multi-utilisateurs, les modifications effectuées par une transaction réalisée par un
utilisateur ne sont connues des autres utilisateurs que lorsque la transaction a été confirmée par un
COMMIT.
Oracle gère automatiquement les accès concurrents. Si une transaction est en train de modifier les lignes d'une
table, les autres transactions peuvent modifier les données telles qu'elles étaient avant ces dernières
modifications (pas de temps d'attente pour la lecture).
Pour rester ``simple'' nous dirons que toute transaction pose des verrous sur les objets qu'elle manipule et que deux grands types de verrous existent :
Commandes qui provoquent un blocage implicite sur les tables et les lignes impliquées : DELETE,
INSERT, UPDATE, ALTER TABLE, ...
Exemples d'application :
Par exemple, dess1 et dess2 réalisent la même requête : ``Donner les noms des employés de la société Bayer Pharma ''.
Par exemple, dess1 modifie la table SOCIETE : ``Modifiez le nom de la société Bayer Pharma en Bayer''. Puis
dess1 et dess2 réalisent la même requête : ```Donnez le nom de la société dirigée par Werner Wenning ''. Que constatez-vous ?
Tester avec COMMIT et ROLLBACK.
Que constatez-vous. Quelle est la solution ? Quelles sont les opérations qui ont été effectivement effectuées sur les tables concernées ?