Anpassen der Isolationsstufen von Transaktionen

Die Isolationseigenschaft ist eine der vier ACID-Eigenschaften (Atomicity, Unteilbarkeit; Consistency, Konsistenz; Isolation; Durability, Beständigkeit), die eine logische Arbeitseinheit aufweisen muss, um als Transaktion zu gelten. Es handelt sich um die Fähigkeit, Transaktionen vor den Auswirkungen von Aktualisierungen zu schützen, die von anderen gleichzeitigen Transaktionen ausgeführt werden. Die Isolationsstufe kann für jede Transaktion angepasst werden.

SQL Server Database Engine (Datenbankmodul) unterstützt die in SQL-92 definierten Isolationsstufen von Transaktionen. Durch das Festlegen von Isolationsstufen für Transaktionen können Programmierer das erhöhte Risiko bestimmter Integritätsprobleme gegen die Unterstützung der Ausweitung des gleichzeitigen Zugriffs auf Daten abwägen. Im Folgenden sind die Transaktionsisolationsstufen aufgeführt:

  • READ UNCOMMITTED

  • READ COMMITTED

  • REPEATABLE READ

  • SNAPSHOT

  • SERIALIZABLE

Jede Isolationsstufe bietet mit zwei Ausnahmen mehr Isolation als die vorhergehende Stufe, indem restriktivere Sperren angewendet werden, die über eine längere Zeit aufrechterhalten werden. Die Ausnahmen sind SNAPSHOT und READ COMMITTED, wenn READ_COMMITTED_SNAPSHOT auf ON festgelegt wurde. Diese Isolationsstufen rufen während Lesevorgängen keine freigegebenen Sperren für Datenzeilen ab. Nur SCH-S-Sperren werden auf der Tabellenebene eingerichtet.

Die Isolationsstufen von Transaktionen können mithilfe von Transact-SQL oder durch eine Datenbank-API festgelegt werden.

  • Transact-SQL
    Transact-SQL -Skripts verwenden die SET TRANSACTION ISOLATION LEVEL-Anweisung.

  • ADO
    ADO-Anwendungen legen die IsolationLevel-Eigenschaft des Connection-Objekts auf adXactReadUncommitted, adXactReadCommitted, adXactRepeatableRead oder adXactReadSerializable fest.

  • ADO.NET
    ADO.NET-Anwendungen, die den verwalteten Namespace System.Data.SqlClient verwenden, können die SqlConnection.BeginTransaction-Methode aufrufen und die Option IsolationLevel auf Unspecified, Chaos, ReadUncommitted, ReadCommitted, RepeatableRead, Serializable oder Snapshot festlegen.

  • OLE DB
    Beim Start einer Transaktion rufen Anwendungen, die OLE DB verwenden, ITransactionLocal::StartTransaction auf, wobei isoLevel auf ISOLATIONLEVEL_READUNCOMMITTED, ISOLATIONLEVEL_READCOMMITTED, ISOLATIONLEVEL_REPEATABLEREAD, ISOLATIONLEVEL_SNAPSHOT oder ISOLATIONLEVEL_SERIALIZABLE festgelegt sind.

    Wenn die Isolationsstufe von Transaktionen im Autocommitmodus angegeben wird, können OLE DB-Anwendungen die DBPROPSET_SESSION-Eigenschaft DBPROP_SESS_AUTOCOMMITISOLEVELS auf DBPROPVAL_TI_CHAOS, DBPROPVAL_TI_READUNCOMMITTED, DBPROPVAL_TI_BROWSE, DBPROPVAL_TI_CURSORSTABILITY, DBPROPVAL_TI_READCOMMITTED, DBPROPVAL_TI_REPEATABLEREAD, DBPROPVAL_TI_SERIALIZABLE, DBPROPVAL_TI_ISOLATED oder DBPROPVAL_TI_SNAPSHOT festlegen.

  • ODBC
    ODBC-Anwendungen rufen die SQLSetConnectAttr-Funktion auf, wobei Attribute auf SQL_ATTR_TXN_ISOLATION und ValuePtr auf SQL_TXN_READ_UNCOMMITTED, SQL_TXN_READ_COMMITTED, SQL_TXN_REPEATABLE_READ oder SQL_TXN_SERIALIZABLE festgelegt sind.

    Für Snapshottransaktionen rufen Anwendungen SQLSetConnectAttr auf, wobei Attribute auf SQL_COPT_SS_TXN_ISOLATION und ValuePtr auf SQL_TXN_SS_SNAPSHOT festgelegt ist. Eine Snapshottransaktion kann mit SQL_COPT_SS_TXN_ISOLATION oder SQL_ATTR_TXN_ISOLATION abgerufen werden.