首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库故障切换期间发生SqlClient.SqlException

问在数据库故障切换期间发生SqlClient.SqlException
EN

Stack Overflow用户
提问于 2009-03-04 16:25:00
回答 3查看 792关注 0票数 1

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

当当前实时数据库故障转移到从数据库时,有一段很短的时间,用户可以获取一个SqlClient.SqlException,并显示“已存在的连接被远程主机强制关闭”的消息。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-06 14:38:05

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

同步镜像故障切换时间线如下所示:

  1. 主服务器A关闭并关闭所有连接。从这一点开始,任何试图连接到服务器A的客户端都将强制连接到服务器A,服务器A确保其日志与辅助服务器B完全同步。
  2. closed.
  3. Primary B的SQL服务启动。
  4. 服务器B的SQL服务开始接受连接,此时客户端可以再次连接。

无论您的服务器有多快,都会有一段短暂(至少一秒)的时间连接会爆炸。正如Steven Lowe所说,您必须捕获该异常,等待,然后重试。请记住,如果您的应用程序作为较大事务的一部分连续发出多个查询,情况将更加复杂-您的事务可能会失败。

票数 2
EN

Stack Overflow用户

发布于 2009-03-04 16:31:40

注意:“故障转移合作伙伴”选项在几年前是不可用的(或者至少我不知道它!)所以下面的解决方案可能已经过时了

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

票数 1
EN

Stack Overflow用户

发布于 2009-03-04 16:31:32

这是因为您的应用程序试图使用连接池中的现有连接。只有在发生此错误后,应用程序池才会被清除,新连接才会使用故障转移框。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/611331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档