OLE DB 驱动程序中的空闲连接复原
适用于: SQL Server 2014 (12.x) 及更高版本Azure SQL 数据库
概述
从 Microsoft OLE DB Driver for SQL Server 版本 18.6.0 开始,连接复原允许驱动程序自动还原断开的空闲连接。
下图说明了 OLE DB Driver 中空闲连接复原功能的工作方式:
- 在 T1,使用 IDBInitialize::Initialize 建立连接。
- 在 T2 和 T3 之间,驱动程序与服务器之间在一段时间内没有通信,导致形成空闲连接。 在此期间,网络连接可能中断。 中断可能类似于网络设备关闭空闲插槽,或使设备进入待机状态一小段时间。
- 在 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 加密,无法恢复连接。