OLE DB 驅動程式中的閒置連線復原
適用於: SQL Server 2014 (12.x) 和更新版本的 Azure SQL 資料庫
概觀
從 Microsoft OLE DB Driver for SQL Server 18.6.0 版開始,連線復原功能可讓驅動程式自動還原中斷的閒置連線。
下圖說明閒置連線復原在 OLE DB 驅動程式中的運作方式:
- 在 T1,系統使用 IDBInitialize::Initialize 建立連線。
- 在 T2 與 T3 之間,驅動程式與伺服器之間有一段時間沒有通訊,因而導致閒置連線。 在此期間,網路連線可能會中斷。 中斷有可能是網路裝置關閉閒置通訊端,或使裝置短暫進入待命狀態之類的情況。
- 在 T3,用戶端應用程式嘗試使用 OLE DB 驅動程式執行命令 (例如,使用 ICommand::Execute)。 驅動程式偵測到連線中斷,並透明地重新建立連線。
關鍵字和屬性
關鍵字 | 屬性 | 數值 | 預設值 | 描述 |
---|---|---|---|---|
ConnectRetryCount | SSPROP_INIT_CONNECT_RETRY_COUNT | 介於 0 到 255 之間的整數值 (含此二數) | 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。
注意
如果命令逾時 (DBPROPSET_ROWSET 中的 DBPROP_COMMANDTIMEOUT) 設定為非零值,且連線復原花費的時間超過命令逾時,則連線將不會復原。
非同步執行的連線復原
如果使用非同步執行且需要復原連線,連線復原將會以同步方式在非同步呼叫執行之前進行。 如需非同步執行的詳細資訊,請參閱執行非同步作業。
預期的錯誤
如果連線復原失敗,可能會發生下列其中一個錯誤:
- 連接中斷,且無法復原。 用戶端驅動程式已嘗試復原連接一或多次,但所有嘗試皆失敗。 請提高 ConnectRetryCount 的值,以增加復原嘗試次數。
- 伺服器未認可復原嘗試,無法進行連接復原。
- 伺服器未保存在復原嘗試期間要求的確切用戶端 TDS 版本,無法進行連接復原。
- 伺服器未保存在復原嘗試期間要求的確切伺服器主要版本,無法進行連接復原。
- 連接中斷,且無法復原。 伺服器將連接標示為無法復原。 未嘗試還原連接。
- 連接中斷,且無法復原。 用戶端驅動程式將連接標示為無法復原。 未嘗試還原連接。
- 伺服器在嘗試復原期間未保留 SSL 加密,無法執行連線復原。