我在故障转移方案中安装了两个Microsoft SQL 2005数据库。应用程序连接字符串具有在连接字符串中指定的“故障转移伙伴”。
当当前实时数据库故障转移到从数据库时,有一段很短的时间,用户可以获取一个SqlClient.SqlException,并显示“已存在的连接被远程主机强制关闭”的消息。
这主要是由于数据库故障转移的速度,还是可以采取其他措施来防止这些错误?
发布于 2009-03-06 14:38:05
您是对的:它与数据库故障转移需要多长时间有关。
同步镜像故障切换时间线如下所示:
无论您的服务器有多快,都会有一段短暂(至少一秒)的时间连接会爆炸。正如Steven Lowe所说,您必须捕获该异常,等待,然后重试。请记住,如果您的应用程序作为较大事务的一部分连续发出多个查询,情况将更加复杂-您的事务可能会失败。
发布于 2009-03-04 16:31:40
注意:“故障转移合作伙伴”选项在几年前是不可用的(或者至少我不知道它!)所以下面的解决方案可能已经过时了
我们必须捕获连接丢失的异常(几种不同的风格),等待几秒钟,然后重试。这就需要一个用于所有数据库操作的包装器来自动化等待和重试逻辑-这并不是大量的工作,而且被证明是相当方便的;工作集中在检查错误代码和异常类型,并制定一个决策表,以确定我们是否可以安全地重试操作。
发布于 2009-03-04 16:31:32
这是因为您的应用程序试图使用连接池中的现有连接。只有在发生此错误后,应用程序池才会被清除,新连接才会使用故障转移框。
https://stackoverflow.com/questions/611331
复制相似问题