OLE DB Driver でのアイドル状態の接続の回復性
適用対象: SQL Server 2014 (12.x) 以降 Azure SQL Database
概要
Microsoft OLE DB Driver for SQL Server バージョン 18.6.0 以降では、接続の回復性により、ドライバーは切断されたアイドル状態の接続を自動的に復元できます。
次の図は、OLE DB Driver でのアイドル状態の接続の回復性のしくみを示したものです。
- T1 において、IDBInitialize::Initialize を使用して接続が確立されます。
- T2 と T3 の期間にドライバーとサーバーの間で通信が行われないため、接続がアイドル状態になります。 この間に、ネットワーク接続が中断される可能性があります。 中断とは、ネットワーク デバイスによってアイドル状態のソケットが閉じられたり、デバイスが短時間スタンバイ状態になることです。
- T3 において、クライアント アプリケーションにより OLE DB Driver を使用してコマンドの実行が試みられます (たとえば、ICommand::Execute を使用)。 ドライバーにより、接続が切断されていることが検出され、接続が透過的に再確立されます。
キーワードとプロパティ
キーワード | プロパティ | 値 | 既定 | 説明 |
---|---|---|---|---|
ConnectRetryCount | SSPROP_INIT_CONNECT_RETRY_COUNT | 0 から 255 の範囲の整数値。 | 1 | 接続が切断された場合の、再接続試行回数の最大値を制御します。 既定では、接続が切断されると、接続の再確立が 1 回試みられます。 値 0 は、再接続が試みられないことを意味します。 |
ConnectRetryInterval | SSPROP_INIT_CONNECT_RETRY_INTERVAL | 1 から 60 までの整数 | 10 | 各接続再試行の間の時間 (秒単位)。 ConnectRetryCount が 0 の場合、このキーワードは無視されます。 |
次のページでは、これらのプロパティを設定する方法の詳細を説明しています。
アプリケーションによって DBPROP_INIT_PROMPT で接続が確立された後、切断された接続でステートメントの実行が試みられた場合、OLE DB ドライバーでダイアログ ボックスは再度表示されません。
プロパティ DBPROP_CONNECTIONSTATUS を使用して接続状態を取得する場合:
- 復旧の間、プロパティから DBPROPVAL_CS_INITIALIZED が返されます。
- 復旧が失敗した場合、プロパティからは DBPROPVAL_CS_COMMUNICATIONFAILURE が返されます。
Note
コマンドのタイムアウト (DBPROPSET_ROWSET の DBPROP_COMMANDTIMEOUT) が 0 以外の値に設定されていて、接続の復旧にコマンドのタイムアウトより長い時間がかかった場合、接続は復旧されません。
非同期実行による接続の復旧
非同期実行を使用していて、接続を復旧する必要がある場合は、非同期呼び出しが実行される前に、接続復旧が同期的に行われます。 非同期実行の詳細については、「非同期操作の実行」を参照してください。
予期されるエラー
接続の復旧が失敗した場合、次のいずれかのエラーが発生する可能性があります。
- 接続が切断され、復旧は不可能です。 クライアント ドライバーは接続の復旧を 1 回または複数回試行しましたが、すべて失敗しました。 復旧試行数を増やすには、ConnectRetryCount の値を増やします。
- サーバーは復旧試行を認識しませんでした。接続復旧は不可能です。
- サーバーは、復旧試行中、要求されたクライアント TDS バージョンを正確に保存しませんでした。接続復旧は不可能です。
- サーバーは、復旧試行中、要求されたサーバー メジャー バージョンを正確に保存しませんでした。接続復旧は不可能です。
- 接続が切断され、復旧は不可能です。 サーバーは接続を復旧不可能としてマークしています。 接続復旧は試行されませんでした。
- 接続が切断され、復旧は不可能です。 クライアント ドライバーは接続を復旧不可能としてマークしています。 接続復旧は試行されませんでした。
- サーバーが復元の試行中に SSL 暗号を保持しなかったため、接続を復元できません。