OLE DB 驱动程序中的空闲连接复原

适用于: SQL Server 2014 (12.x) 及更高版本 Azure SQL 数据库

下载 OLE DB 驱动程序

概述

从 Microsoft OLE DB Driver for SQL Server 版本 18.6.0 开始,连接复原允许驱动程序自动还原断开的空闲连接。

下图说明了 OLE DB Driver 中空闲连接复原功能的工作方式:连接复原信息图

  1. 在 T1,使用 IDBInitialize::Initialize 建立连接。
  2. 在 T2 和 T3 之间,驱动程序与服务器之间在一段时间内没有通信,导致形成空闲连接。 在此期间,网络连接可能中断。 中断可能类似于网络设备关闭空闲插槽,或使设备进入待机状态一小段时间。
  3. 在 T3,客户端应用程序尝试使用 OLE DB 驱动程序(例如,使用 ICommand::Execute)执行命令。 驱动程序检测到连接断开,并以透明方式重新建立连接。

关键字和属性

关键字 属性 默认 说明
ConnectRetryCount SSPROP_INIT_CONNECT_RETRY_COUNT 介于 0 到 255(包括 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 加密,无法恢复连接。