重新连接到数据库镜像会话

如果已建立的到数据库镜像会话的连接因某种原因(例如,由于数据库镜像故障转移)而失败,但应用程序尝试重新连接到初始服务器,则数据访问接口可以尝试使用客户端缓存中存储的故障转移伙伴名称进行重新连接。但是,重新连接不是自动进行的,应用程序必须能够识别错误。然后,应用程序需要关闭失败的连接并使用相同的连接字符串属性打开新连接。此时,数据访问接口将连接重定向到故障转移伙伴。如果由此名称标识的服务器实例当前为主体服务器,则连接尝试通常都会成功。如果不确定事务已提交还是回滚,则应用程序必须检查事务的状态,检查方法与重新连接到独立服务器实例时所用的方法相同。

重新连接类似于连接字符串为其提供故障转移伙伴名称的初始连接。如果首次连接尝试失败,则连接尝试会反复轮流使用初始伙伴名称和故障转移伙伴名称,直到客户端连接到主体服务器或数据访问接口超时。

注意注意

SQL Server Native Client 验证它是否连接到主体服务器实例,但不验证此实例是否为连接字符串初始伙伴名称中指定的服务器实例的伙伴。

如果连接使用 TCP/IP 并且客户端使用 Windows XP 或更高版本,则连接重试算法将确定为每一轮连接尝试所分配的时间。有关详细信息,请参阅将连接字符串关键字用于 SQL Server Native Client

重要说明重要提示

如果客户端与数据库断开连接,则数据访问接口不会尝试重新连接。客户端必须发出新的连接请求。同样,如果应用程序因中断连接而关闭,则会丢失已缓存的伙伴名称。如果因为主体服务器不可用而中断连接,则应用程序可重新连接到镜像服务器的唯一方法是在其连接字符串中提供故障转移伙伴名称。

重定向对客户端应用程序的影响

故障转移之后,数据访问接口将连接重定向到当前主体服务器实例。但是,重定向对客户端是透明的。对于客户端,重定向的连接似乎是由初始伙伴名称标识的到服务器实例的连接。初始伙伴当前为镜像服务器时,客户端似乎可以连接到镜像服务器并更新镜像数据库。但实际上,客户端已重定向到故障转移伙伴(当前主体数据库)并更新新的主体数据库。

重定向到故障转移伙伴之后,客户端在通过 Transact-SQL USE 语句以使用其他数据库时可能会出现意外结果。如果当前主体服务器实例(故障转移伙伴)具有不同于原始主体服务器(初始伙伴)的一组数据库,则会出现这种情况。