スナップショット分離を使用した作業
SQL Server 2005 では、OLTP (オンライン トランザクション処理) アプリケーションの同時実行の強化を目的として、新しく "スナップショット" 分離レベルが導入されました。 以前のバージョンの SQL Server では、同時実行はロックだけを基にしていました。そのため、アプリケーションによってはブロックやデッドロックなどの問題が生じることがありました。 スナップショット分離は行のバージョン管理の機能強化に依存しており、リーダーとライターのブロッキングを回避することでパフォーマンスを向上することを目的としています。
スナップショット分離の下で開始されたトランザクションは、トランザクションの開始時点のデータベース スナップショットを読み取ります。 この結果、スナップショット トランザクション コンテキスト内でキーセット サーバー カーソル、動的サーバー カーソル、および静的サーバー カーソルを開くと、これらのカーソルはシリアル化可能なトランザクション内で開かれた静的カーソルとほぼ同様に動作します。 また、スナップショット分離レベルの下でカーソルが開かれると、ロックが設定されず、サーバーでのブロッキングを減少させることができます。
SQL Server Native Client OLE DB プロバイダー
SQL Server Native Client OLE DB プロバイダーでは、SQL Server 2005 で導入されたスナップショット分離の使用に関して、機能強化が施されています。 具体的には、DBPROPSET_DATASOURCEINFO プロパティ セットと DBPROPSET_SESSION プロパティ セットへ変更が加えられています。
DBPROPSET_DATASOURCEINFO
DBPROP_SUPPORTEDTXNISOLEVELS プロパティで使用される DBPROPVAL_TI_SNAPSHOT 値が追加され、DBPROPSET_DATASOURCEINFO プロパティ セットではスナップショット分離レベルがサポートされるようになりました。 この新しい値は、データベースでバージョン管理が有効になっているかどうかにかかわらず、スナップショット分離レベルがサポートされることを示します。 次に、DBPROP_SUPPORTEDTXNISOLEVELS の値の一覧を示します。
プロパティ ID |
説明 |
---|---|
DBPROP_SUPPORTEDTXNISOLEVELS |
型 : VT_I4 R/W: 読み取り専用 説明 : サポートされるトランザクション分離レベルを指定するビットマスク。 次の値を 0 個以上指定できます。
|
DBPROPSET_SESSION
DBPROP_SESS_AUTOCOMMITISOLEVELS プロパティで使用される DBPROPVAL_TI_SNAPSHOT 値が追加され、DBPROPSET_SESSION プロパティ セットではスナップショット分離レベルがサポートされるようになりました。 この新しい値は、データベースでバージョン管理が有効になっているかどうかにかかわらず、スナップショット分離レベルがサポートされることを示します。 次に、DBPROP_SESS_AUTOCOMMITISOLEVELS の値の一覧を示します。
プロパティ ID |
説明 |
---|---|
DBPROP_SESS_AUTOCOMMITISOLEVELS |
型 : VT_I4 R/W: 読み取り専用 説明 : 自動コミット モードのときのトランザクション分離レベルを示すビットマスクを指定します。 このビットマスクには、DBPROP_SUPPORTEDTXNISOLEVELS に設定できる値と同じ値を設定できます。 |
![]() |
---|
SQL Server 2005 よりも前のバージョンの SQL Server を使用しているときに DBPROPVAL_TI_SNAPSHOT を設定すると、エラー DB_S_ERRORSOCCURRED または DB_E_ERRORSOCCURRED が発生します。 |
トランザクションでスナップショット分離がサポートされる方法については、「ローカル トランザクションのサポート」を参照してください。
SQL Server Native Client ODBC ドライバー
SQL Server Native Client ODBC ドライバーでは、SQLSetConnectAttr 関数と SQLGetInfo 関数に行われた強化により、スナップショット分離がサポートされます。
SQLSetConnectAttr
SQLSetConnectAttr 関数では、SQL_COPT_SS_TXN_ISOLATION 属性の使用をサポートするようになりました。 SQL_COPT_SS_TXN_ISOLATION を SQL_TXN_SS_SNAPSHOT に設定すると、トランザクションがスナップショット分離レベルで実行されることが報告されます。
SQLGetInfo
SQLGetInfo 関数では、SQL_TXN_ISOLATION_OPTION 情報型に追加された SQL_TXN_SS_SNAPSHOT 値をサポートするようになりました。
トランザクションでスナップショット分離がサポートされる方法については、「カーソルのトランザクション分離レベル」を参照してください。