OLE DB 驅動程式中的閒置連線復原

適用於:SQL Server 2014 (12.x) 和更新版本Azure SQL Database

下載 OLE DB 驅動程式

概觀

從 Microsoft OLE DB Driver for SQL Server 18.6.0 版開始,連線復原功能可讓驅動程式自動還原中斷的閒置連線。

下圖說明閒置連線復原在 OLE DB 驅動程式中的運作方式:連線復原資訊圖表

  1. 在 T1,系統使用 IDBInitialize::Initialize 建立連線。
  2. 在 T2 與 T3 之間,驅動程式與伺服器之間有一段時間沒有通訊,因而導致閒置連線。 在此期間,網路連線可能會中斷。 中斷有可能是網路裝置關閉閒置通訊端,或使裝置短暫進入待命狀態之類的情況。
  3. 在 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 加密,無法執行連線復原。