Partager via


Niveaux d'isolement

Lorsque le verrouillage est utilisé en tant que mécanisme de contrôle des transactions, il permet de résoudre les problèmes d'accès concurrentiels. Il permet à toutes les transactions d'être exécutées indépendamment les unes des autres, bien que plusieurs transactions puissent être exécutées à tout moment. Le niveau selon lequel une transaction est préparée à accepter des données incohérentes est appelé niveau d'isolement. Un niveau d'isolement plus élevé offre davantage de protection contre l'incohérence des données, mais restreint les possibilités d'accès concurrentiels.

Dans SQL Server Compact, le niveau d'isolement requis par une application détermine le comportement de verrouillage utilisé par SQL Server Compact.

SQL Server Compact prend en charge les niveaux d'isolement suivants (du plus bas au plus élevé) :

  • Lecture validée (paramètre par défaut de SQL Server Compact)

  • Lecture renouvelée

  • Sérialisable (les transactions sont complètement isolées les unes des autres)

Lorsque le niveau d'isolement augmente, les données sont davantage protégées contre les incohérences. En revanche, la simultanéité des transactions diminue et l'accès multi-utilisateur est affecté.

Notes

SQL Server Compact garantit qu'une transaction ne peut pas lire les données non validées d'une autre transaction (lecture erronée). Cette situation est obtenue à l'aide d'un mécanisme de version de page qui permet aux utilisateurs de lire des données sans demander des verrous S sur les données. Cela offre un accès simultané exceptionnel pour lire les opérations (SELECT).

Niveaux d'isolement et problèmes d'accès concurrentiels

Le tableau ci-dessous montre les niveaux d'isolement et les problèmes d'accès concurrentiels qu'ils entraînent.

Notes

Les problèmes d'accès concurrentiels qui peuvent se produire comprennent la dépendance non validée, les analyses incohérentes et les lectures fantôme. Pour plus d'informations sur les problèmes d'accès concurrentiels, consultez Accès concurrentiels.

Niveau d'isolement

Dépendance non validée (lectures erronées)

Analyses incohérentes (lectures non renouvelées)

Lectures fantôme

Lecture validée

Non

Oui

Oui

Lecture renouvelée

Non

Non

Oui

Sérialisable

Non

Non

Non

Les niveaux d'isolement peuvent être définis par programme ou à l'aide de la syntaxe SQL SET TRANSACTION ISOLATION LEVEL. Pour plus d'informations, consultez Niveau d'isolement des transactions.

Niveau d'isolation de l'étendue de transaction

Le niveau d'isolation par défaut de System.Transaction est ReadCommitted. Toutefois, par défaut, une transaction d'une étendue de transaction s'exécute avec le niveau d'isolation défini sur Serializable. Par conséquent, lorsqu'une connexion SQL Server Compact est inscrite dans une étendue de transaction, la transaction implicite (qui est une transaction SQL Server Compact créée en interne pour l'étendue de transaction) s'exécute par défaut au niveau d'isolation Serializable. Certains des constructeurs surchargés de classe TransactionScope acceptent le niveau d'isolation en tant que paramètre. Il convient de les utiliser pour spécifier une valeur différente du niveau d'isolation de la transaction implicite. Si le niveau d'isolation spécifié n'est pas pris en charge par SQL Server Compact, l'inscription d'une connexion SQL Server Compact dans une étendue de transaction lèvera une exception.

De même, la propriété default lock timeout spécifiée dans la chaîne de connexion, détermine le temps d'attente d'une transaction. Toutefois, lorsqu'une connexion est inscrite à un TransactionScope, TimeSpan du TransactionScope substitue cette propriété. Par exemple, si ConnectionString contenait 1000 ms comme valeur de default lock timeout et que la connexion était inscrite dans une TransactionScope de 100 ms, la transaction actuelle durera uniquement 100 ms et pas 1000 ms. Autrement dit, si vous voulez que l'application ait des délais d'attente de transaction plus longs et qu'elle exécute les commandes dans une TransactionScope, vous devrez spécifier la valeur de temporisation à la fois dans la chaîne de connexion et dans TimeSpan pour TransactionScope.

Notes

La valeur par défaut de default lock timeou" est 2000 ms et celle de d'une TransactionScope est égale à 1 minute.

Voir aussi

Concepts

Transactions (SQL Server Compact)

Verrouillage (SQL Server Compact)

Curseurs (SQL Server Compact)