千家信息网

案例分享:数据库镜像故障转移失败

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,案例分享:数据库镜像故障转移失败对于关键性数据库,我们配置了带有见证服务器的同步数据库镜像,来允许自动故障转移。一切运行正常,直到有一次数据中心的突然断电。数据库镜像执行了故障转移,但是运维反馈说应用
千家信息网最后更新 2026年10月31日案例分享:数据库镜像故障转移失败

案例分享:数据库镜像故障转移失败

对于关键性数据库,我们配置了带有见证服务器的同步数据库镜像,来允许自动故障转移。一切运行正常,直到有一次数据中心的突然断电。数据库镜像执行了故障转移,但是运维反馈说应用程序挂起了。当我们手动切换回来,应用程序又正常工作。为什么应用程序没有也故障转移呢?

这是使用数据库镜像的合理的常见问题,像这样的生产应用失败,是因为在镜像部署后没有做故障转移测试。在失败的故障转移之后我们感到棘手。

为了避免生产应用停机,我们在测试环境复制了线上的镜像环境。在确认应用和数据库镜像正常工作后,我们将主服务器关机,应用完全挂起。

我们检查了,镜像服务器已经成功初始化了一个故障转移,并在线作为主服务器。我们也检查了镜像数据库为在线状态,可以被新的主服务器本地访问,并且主服务器也可以像被应用程序使用一样被远程客户端访问。

然后,我们来检查应用程序。和开发聊了下,他确认应用程序是使用ADO.NET来连接SQL Server,并使用显式客户端重定向,在SqlConnection的ConnectionString属性指定镜像服务器名。(顺便说一句,使用显式客户端重定向总是比隐式客户端重启定向要好,隐式依赖于客户端连接建立时自动缓存的镜像服务器名)

那为什么应用程序没有故障转移呢?

我深入探究应用程序是如何处理连接失败,发现根本没有应对存在的连接失败的代码!基本上,当应用程序初始化,应用会打开一个到SQL Server的连接,并且绝不尝试重连。

结果发现:尽管DBA部署了数据库镜像,没有和开发讨论过高可用性,因此应用程序代码没有改变。在开发修复后,应用程序连接层可以应对连接失败和执行重连逻辑,在数据库故障转移之后可以完美工作。

这个故事告诉我们,需要重新构建应对发生的连接失败和重连,来让故障转移正确工作。在这个案例中,如果我们在部署在生产环境之前,在测试环境尝试了数据库镜像故障转移,那客户端就会发现这个问题了。

具体原理和应用程序的代码示例,可参考以下文章:

  • 将客户端连接到数据库镜像会话(https://msdn.microsoft.com/zh-cn/library/ms175484.aspx)

  • Implementing Application Failover with Database Mirroring(https://technet.microsoft.com/en-us/library/cc917713.aspx#EDAA)

  • Sample Application to test database mirroring failover(https://blogs.msdn.microsoft.com/grahamk/2009/01/16/sample-application-to-test-database-mirroring-failover/)



应用 镜像 数据 应用程序 程序 故障 数据库 服务器 服务 客户 客户端 环境 工作 代码 开发 检查 测试 生产 案例 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 天津市摩尔互联网科技 深圳互联网科技公司 致聘互联网科技 碳银互联网科技有限公司 新华互联网科技校企合作 西藏七维空间互联网科技有限公司 佳云科技和互联网广告 中国航天科技大学国际工业互联网 开一家科技互联网公司需要多少钱 上海钢联属于互联网科技股吗 互联网科技快讯热点 工业互联网科技成果转化 风投北京互联网科技 保山互联网科技靠谱吗 易租星互联网科技有限公司 互联网科技对化妆品行业 平安好医生打造互联网科技医疗 伍佰万互联网科技是干嘛的 前海云享互联网科技 为想互联网科技怎么样 互联网的科技创新 期待互联网科技 互联网科技博客 互联网科技公司做什么 哈尔滨秒房互联网科技有限公司 互联网软件和科技 工业互联网展湾科技股份有限公司 新氧科技和美国互联网有关系吗 网互联网络科技
0