Partager via


Personnalisation du niveau d'isolation des transactions

Pour le moteur de base de données SQL Server de Microsoft, READ COMMITTED est le niveau d'isolation par défaut. Si une application doit fonctionner à un niveau d'isolation différent, elle peut le définir selon plusieurs méthodes :

  • Exécuter l'instruction SET TRANSACTION ISOLATION LEVEL.

  • Les applications ADO.NET utilisant l'espace de noms géré System.Data.SqlClient peuvent indiquer une option IsolationLevel via la méthode SqlConnection.BeginTransaction.

  • Les applications qui utilisent ADO peuvent définir la propriété Autocommit Isolation Levels.

  • Lors du lancement d'une transaction, les applications utilisant OLE DB peuvent appeler ITransactionLocal::StartTransaction avec le paramètre isoLevel défini sur le niveau d'isolation de la transaction souhaité. Lorsque vous spécifiez le niveau d'isolation en mode de validation automatique, les applications utilisant OLE DB peuvent affecter à la propriété DBPROP_SESS_AUTOCOMMITISOLEVELS de DBPROPSET_SESSION la valeur de niveau d'isolation de la transaction souhaitée.

  • Les applications qui utilisent ODBC peuvent définir l'attribut SQL_COPT_SS_TXN_ISOLATION à l'aide de SQLSetConnectAttr.

Pour plus d'informations sur la configuration des niveaux d'isolation des transactions, consultez Optimisation des niveaux d'isolement des transactions.

Lorsque le niveau d'isolation est spécifié, le verrouillage s'applique à ce niveau d'isolation, à toutes les requêtes et instructions DML de la session SQL Server. Le niveau d'isolation reste en vigueur jusqu'à la fin de la session ou jusqu'à ce qu'il soit modifié.

L'exemple suivant montre comment définir le niveau d'isolation SERIALIZABLE :

USE AdventureWorks2008R2;
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
GO
BEGIN TRANSACTION;
SELECT BusinessEntityID
    FROM HumanResources.Employee;
GO

Le niveau d'isolation peut être remplacé si nécessaire pour des requêtes ou des instructions DML individuelles, en spécifiant un indicateur de niveau table. Un indicateur de niveau table n'affecte pas les autres instructions de la session. Il est recommandé de n'utiliser les indicateurs de niveau table pour modifier le comportement par défaut qu'en cas d'absolue nécessité.

Le moteur de base de données peut être obligé d'acquérir des verrous lors de la lecture de métadonnées même si le niveau d'isolation est tel que les verrous partagés ne sont pas nécessaires pendant la lecture des données. Par exemple, une transaction qui s'exécute au niveau d'isolation READ UNCOMMITTED n'acquiert pas de verrous partagés pendant la lecture de données, mais elle peut en demander quelquefois lors de la lecture d'un affichage catalogue système. Autrement dit, une transaction de lecture non validée peut provoquer un blocage si elle interroge une table pendant qu'une transaction modifie simultanément les données de cette table.

Pour déterminer le niveau d'isolation de la transaction en cours, utilisez l'instruction DBCC USEROPTIONS comme dans l'exemple qui suit. Le jeu de résultats peut être différent sur votre système.

USE AdventureWorks2008R2;
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
DBCC USEROPTIONS;
GO

Voici l'ensemble des résultats.

Options Set                   Valeur

---------------------------- -------------------------------------------

textsize                     2147483647

language                     us_english

dateformat                   mdy

datefirst                    7

... ...

Isolation level repeatable read

(14 row(s) affected)

Exécution de DBCC terminée. Si DBCC vous a adressé des messages d'erreur, contactez l'administrateur système.