数据库故障转移期间发生SqlClient.SqlException

时间:2009-03-04 16:25:00

标签: sql-server sql-server-2005 exception failover

我在故障转移方案中设置了两个Microsoft SQL 2005数据库。应用程序连接字符串具有在连接字符串中指定的“故障转移伙伴”。

当当前实时数据库故障转移到从属数据库时,用户可以获得SqlClient.SqlException的一小段时间,并显示消息“远程主机强行关闭现有连接”。

这主要是由于数据库故障转移的速度还是可以采取其他措施来防止这些错误?

3 个答案:

答案 0 :(得分:2)

你是对的:它与数据库故障转移需要多长时间有关。

同步镜像故障转移时间表如下所示:

  1. 主服务器A关闭并关闭所有连接。从现在开始,任何尝试连接到服务器A的客户端都将强制关闭其连接。
  2. 主服务器A确保其日志与辅助服务器B完全同步。
  3. 服务器B的SQL服务启动。
  4. 服务器B的SQL服务开始接受连接,此时客户端可以再次连接。
  5. 无论你的服务器有多快,连接爆炸的时间都会短暂(至少一秒钟)。就像Steven Lowe说的那样,你必须陷入异常,等待,然后再试一次。请记住,如果您的应用作为较大事务的一部分连续发出多个查询,则会更复杂 - 您的事务可能会失败。

答案 1 :(得分:1)

警告:几年前“故障转移伙伴”选项不可用(或者至少我不知道它!)因此以下解决方案可能已过时

我们必须捕获连接丢失的异常(几种不同的风格),等待几秒钟,然后再试一次。这需要所有数据库操作的包装器来自动化等待和重试逻辑 - 这不是很多工作并且被证明是相当方便的;我们正在努力检查错误代码和异常类型,并制定一个决策表,确定我们是否可以安全地重试该操作。

答案 2 :(得分:0)

这是由于您的应用程序尝试使用连接池中的现有连接。只有在发生此错误后,才会清除应用程序池,并且新连接将使用故障转移框。