トランザクション分離レベルの調整

分離プロパティは、ACID と呼ばれる 4 つのプロパティの 1 つで、論理的な 1 つの作業単位を持ち、トランザクションとして有効である必要があります。ACID の 4 つのプロパティには、原子性 (atomicity)、一貫性 (consistency)、分離性 (isolation)、および持続性 (durability) があります。分離プロパティは、他の同時実行トランザクションによる更新の影響からトランザクションを保護する機能です。分離レベルは、実際にはトランザクションごとにカスタマイズできます。

SQL Server データベース エンジン では、SQL-92 で定義されているトランザクション分離レベルがサポートされています。トランザクション分離レベルを設定すると、プログラマにとって一部の整合性の問題というリスクは増えますが、データへの同時アクセスをより多くサポートできるようになります。トランザクション分離レベルは次のとおりです。

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SNAPSHOT
  • SERIALIZABLE

2 つの例外はありますが、それぞれの分離レベルでは、より制限の強いロックを長期間保持することにより、前のレベルよりも強度の分離が実現されます。例外は、SNAPSHOT、および READ_COMMITTED_SNAPSHOT が ON に設定されているときの READ COMMITTED です。これらの分離レベルは、読み取り操作中にデータ行の共有ロックを取得しません。SCH-S ロックのみがテーブル レベルに保持されます。

トランザクションの分離レベルは、Transact-SQL を使用するかデータベース API を使用して設定できます。

Transact-SQL

Transact-SQL スクリプトでは、SET TRANSACTION ISOLATION LEVEL ステートメントが使用されます。

ADO

ADO アプリケーションでは、Connection オブジェクトの IsolationLevel プロパティが adXactReadUncommitted、adXactReadCommitted、adXactRepeatableRead、または adXactReadSerializable に設定されます。

ADO.NET

System.Data.SqlClient マネージ名前空間を使用している ADO.NET アプリケーションは、SqlConnection.BeginTransaction メソッドを呼び出し、IsolationLevel オプションを Unspecified、Chaos、ReadUncommitted、ReadCommitted、RepeatableRead、Serializable、および Snapshot に設定することができます。

OLE DB

トランザクションを開始するとき、OLE DB を使用するアプリケーションは、isoLevel を ISOLATIONLEVEL_READUNCOMMITTED、ISOLATIONLEVEL_READCOMMITTED、ISOLATIONLEVEL_REPEATABLEREAD、ISOLATIONLEVEL_SNAPSHOT、または ISOLATIONLEVEL_SERIALIZABLE に設定して、ITransactionLocal::StartTransaction を呼び出します。

トランザクション分離レベルを自動コミット モードで指定する場合、OLE DB アプリケーションは、DBPROPSET_SESSION プロパティの DBPROP_SESS_AUTOCOMMITISOLEVELS を DBPROPVAL_TI_CHAOS、DBPROPVAL_TI_READUNCOMMITTED、DBPROPVAL_TI_BROWSE、DBPROPVAL_TI_CURSORSTABILITY、DBPROPVAL_TI_READCOMMITTED、DBPROPVAL_TI_REPEATABLEREAD、DBPROPVAL_TI_SERIALIZABLE、DBPROPVAL_TI_ISOLATED、または DBPROPVAL_TI_SNAPSHOT に設定できます。

ODBC

ODBC アプリケーションは、Attribute を SQL_ATTR_TXN_ISOLATION に設定し、ValuePtr を SQL_TXN_READ_UNCOMMITTED、SQL_TXN_READ_COMMITTED、SQL_TXN_REPEATABLE_READ、または SQL_TXN_SERIALIZABLE に設定して、SQLSetConnectAttr を呼び出します。

スナップショット トランザクションでは、アプリケーションは、Attribute を SQL_COPT_SS_TXN_ISOLATION に設定し、ValuePtr を SQL_TXN_SS_SNAPSHOT に設定して、SQLSetConnectAttr を呼び出します。スナップショット トランザクションは、SQL_COPT_SS_TXN_ISOLATION または SQL_ATTR_TXN_ISOLATION のいずれかを使用して取得できます。

参照

概念

データベース エンジンにおける分離レベル

その他の技術情報

分離レベル (OLE DB)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手