故障转移后,具有镜像的 SQL 连接仍然有效

故障转移后,具有镜像的 SQL 连接仍然有效

我有一个安装在两台服务器 SQL01 和 SQL02 上的 Windows 服务应用程序。两台服务器上都有一个 SQL 服务器(X1 和 X2),它们具有相同的内容。为一个名为 Interface 的数据库建立了镜像合作关系。

两个服务都连接到本地数据库,因此彼此之间没有任何联系。该服务非常简单,它从数据库中读取数据并执行一些操作,然后将其发送到远程数据库(两个实例都一样)。使用一个简单的函数来确定数据库是否可用,方法是使用虚拟 SELECT。如果数据库回答,则表示可用,否则表示不可用。

当我们第一次启动整个系统时,显然只有一个数据库在运行(因为存在合作关系)。但是,当我们进行手动故障转移时,似乎数据库仍然可用!我应该重新启动服务吗?它会停止这样做,然后重新启动以按应有的方式工作。

据我所知,我没有保持与数据库的任何连接。我完成查询后立即打开和关闭它们。

有人知道会发生什么吗?

谢谢,

答案1

实际情况是,当您成功连接到主服务器时,SQL Server 会将故障转移伙伴发送到客户端,然后客户端会将此故障转移伙伴缓存在客户端。这就是在发生故障转移时将使用的内容。但是,当建立初始连接时主服务器已关闭,则客户端将在连接字符串中尝试故障转移伙伴。如果成功,SQL Server 会将“新”故障转移伙伴发送到客户端,然后客户端会将此故障转移伙伴缓存在客户端。这意味着原来的主服务器现在作为故障转移伙伴存储在客户端上。

http://blogs.msdn.com/b/spike/archive/2010/12/08/clarification-on-the-failover-partner-in-the-connectionstring-in-database-mirror-setup.aspx

换句话说,SQL 客户端会自动处理故障转移(您必须重试故障转移期间正在进行的任何事务),但如果您未指定故障转移伙伴且主体不可用,则那是当连接字符串的“故障转移伙伴”部分相关时。

相关内容