スナップショット分離を使用した作業
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 個以上指定できます。 - 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 |
DBPROPSET_SESSION
DBPROP_SESS_AUTOCOMMITISOLEVELS プロパティで使用される DBPROPVAL_TI_SNAPSHOT 値が追加され、DBPROPSET_SESSION プロパティ セットではスナップショット分離レベルがサポートされるようになりました。 この新しい値は、データベースでバージョン管理が有効になっているかどうかにかかわらず、スナップショット分離レベルがサポートされることを示します。 次に、DBPROP_SESS_AUTOCOMMITISOLEVELS の値の一覧を示します。
プロパティ ID | 説明 |
---|---|
DBPROP_SESS_AUTOCOMMITISOLEVELS | 型 : VT_I4 R/W: 読み取り専用 説明 : 自動コミット モードのときのトランザクション分離レベルを示すビットマスクを指定します。 このビットマスクには、DBPROP_SUPPORTEDTXNISOLEVELS に設定できる値と同じ値を設定できます。 |
Note
DB_S_ERRORSOCCURREDまたはDB_E_ERRORSOCCURREDエラーは、2005 年より前のバージョンのSQL Serverを使用するときにDBPROPVAL_TI_SNAPSHOTが設定されている場合SQL Server発生します。
トランザクションでスナップショット分離がサポートされる方法については、「ローカル トランザクションのサポート」を参照してください。
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値をサポートするようになりました。
トランザクションでのスナップショット分離のサポート方法については、「カーソル トランザクション分離レベル」を参照してください。