TP ORACLE: Gestion des accès concurrents

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 :

  • en lecture (verrou passant plusieurs lectures simultanées peuvent avoir lieu)
  • en écriture (verrou bloquant la première écriture bloque les autres jusqu'à ce que le verrou soit relaché)

Commandes qui provoquent un blocage implicite sur les tables et les lignes impliquées : DELETE,

INSERT, UPDATE, ALTER TABLE, ...

Exemples d'application :

  • Faites des sélections sur les mêmes lignes des mêmes tables avec deux noms utilisateurs différents

Par exemple, dess1 et dess2 réalisent la même requête : ``Donner les noms des employés de la société Bayer Pharma ''.

  • Réessayez le même exercice mais avec des commandes provoquant des blocages

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.

  • Etreinte mortelle (DEADLOCK) :
  • dess1 fait un UPDATE sur le tuple i de la table SOCIETE
  • dess2 fait un UPDATE sur le tuple j de la table MEDICAMENT
  • dess2 fait un UPDATE sur le tuple j de la table SOCIETE
  • dess1 fait un UPDATE sur le tuple i de la table MEDICAMENT

Que constatez-vous. Quelle est la solution ? Quelles sont les opérations qui ont été effectivement effectuées sur les tables concernées ?

Article publié le 26 Avril 2010 Mise à jour le Jeudi, 12 Août 2021 19:52 par GC Team