Spécification du niveau d'isolement des transactions

De RAD Studio
Aller à : navigation, rechercher

Remonter à Gestion des transactions


Le niveau d'isolement des transactions détermine comment une transaction interagit avec d'autres transactions simultanées quand elles portent sur les mêmes tables. Il affecte, en particulier, ce qu'une transaction "voit" des changements apportés à une table par les autres transactions.

Chaque type de serveur prend en charge un ensemble différent de niveaux possibles d'isolement des transactions. Ces derniers sont au nombre de trois :

  • DirtyRead : Lorsque le niveau d'isolement a pour valeur DirtyRead, votre transaction voit toutes les modifications apportées par les autres transactions, même si elles n'ont pas été validées. Les changements non validés ne sont pas permanents et peuvent être annulés à tout moment. Cette valeur représente le niveau d'isolement le plus faible et n'est pas disponible pour de nombreux serveurs de base de données (tels qu'Oracle, Sybase, MS-SQL et InterBase).
  • ReadCommitted : Lorsque le niveau d'isolement a pour valeur ReadCommitted, seuls les changements validés apportés par les autres sont visibles. Bien que ce paramètre empêche votre transaction de voir les changements non validés susceptibles d'être annulés, vous pouvez obtenir une vue incohérente de l'état de la base de données si une autre transaction est validée pendant le processus de lecture. Ce niveau est disponible pour toutes les transactions à l'exception des transactions locales gérées par le BDE.
  • RepeatableRead : Lorsque le niveau d'isolement a pour valeur RepeatableRead, votre transaction est en mesure de voir un état cohérent des données de la base de données. Votre transaction voit une seule capture instantanée des données. Elle ne peut pas voir les changements de données ultérieurs apportés par d'autres transactions simultanées, mêmes si elles sont validées. Ce niveau d'isolement garantit qu'après la lecture d'un enregistrement par la transaction, la vue de cet enregistrement ne changera pas. C'est le niveau où votre transaction est la mieux isolée des changements apportés par d'autres transaction. Ce niveau n'est pas disponible sur certains serveurs, tels que Sybase et MS-SQL, ni pour les transactions locales gérées par le BDE.

En outre, TSQLConnection vous permet d'adapter les niveaux d'isolement aux bases de données. Les niveaux d'isolement personnalisés sont définis par le pilote dbExpress. Reportez-vous à la documentation du pilote pour plus d'informations.

Remarque :  Pour une description détaillée de la mise en oeuvre de chaque niveau d'isolement, reportez-vous à la documentation de votre serveur.

TDatabase et TADOConnection vous permettent de spécifier le niveau d'isolement des transactions par le biais de la propriété TransIsolation. Lorsque vous attribuez à TransIsolation une valeur non prise en charge par le serveur de bases de données, vous obtenez le niveau d'isolement immédiatement supérieur (éventuellement disponible). En l'absence de niveau supérieur, le composant connexion déclenche une exception en cas de tentative de démarrage d'une transaction.

Lorsque vous utilisez TSQLConnection, le niveau d'isolement des transactions est contrôlé par le champ IsolationLevel du descripteur de transaction.

Lorsque vous utilisez InterBase Express, le niveau d'isolement des transactions est contrôlé par un paramètre de transaction.

Voir aussi