SQL Server Native Client でのスナップショット分離の操作
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) は同梱されていません。
- SQL Server 2022 (16.x) 以降のバージョン
- SQL Server Management Studio (19 以降のバージョン) の場合
SQL Server Native Client (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。
新しいプロジェクトの場合は、次のいずれかのドライバーを使用します。
SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。
SQL Server 2005 (9.x) では、OLTP (オンライン トランザクション処理) アプリケーションのコンカレンシーの強化を目的として、新しく "スナップショット" 分離レベルが導入されました。 以前のバージョンの SQL Server では、コンカレンシーはロックだけを基にしていました。そのため、アプリケーションによってはブロックやデッドロックなどの問題が生じることがありました。 スナップショット分離は行のバージョン管理の機能強化に依存しており、リーダーとライターのブロッキングを回避することでパフォーマンスを向上することを目的としています。
スナップショット分離の下で開始されたトランザクションは、トランザクションの開始時点のデータベース スナップショットを読み取ります。 この結果、スナップショット トランザクション コンテキスト内でキーセット サーバー カーソル、動的サーバー カーソル、および静的サーバー カーソルを開くと、これらのカーソルはシリアル化可能なトランザクション内で開かれた静的カーソルとほぼ同様に動作します。 また、スナップショット分離レベルの下でカーソルが開かれると、ロックが設定されず、サーバーでのブロッキングを減少させることができます。
SQL Server Native Client OLE DB プロバイダー
SQL Server Native Client OLE DB プロバイダーには、SQL Server 2005 (9.x) で導入されたスナップショット分離を利用する拡張機能があります。 具体的には、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
SQL Server よりも前のバージョンの SQL Server 2005 (9.x) を使用しているときに 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値をサポートするようになりました。
トランザクションでのスナップショット分離のサポート方法については、「 Cursor トランザクション分離レベル」を参照してください。