none
.net C#程序连接双机镜像sqlserver2008问题 RRS feed

  • 问题

  • 场境:

    两台sqlserver 2008 分别是: 192.168.0.139 (主服务器); 192.168.140 (镜像服务器)

    客户端:

    .net C# 开发软件

    问题描述:

    两台sql服务器做了双机镜像处理,139为主服务器,140为镜像服务器,现在用.net C# 开发一软件连接到sql服务器,程序连接字符串里已经写明主服务器和镜像地址如下:

    Data Source=192.168.0.139;Failover Partner=192.168.0.140;DataBase=mydb;User ID=sa;Password=sa;

    程序启动运行后可以正常连接到主用139数据库,当在数据库上手动进行故障转移切换主用和镜像服务器时(139成为镜像服务器140为主服务器)时,程序不需要任何处理,可以自动连接到140上去,如果再次切换主用和镜像服务器时(140成为镜像服务器139为主服务器)时,程序就不能自动连接到139上去,经过vs2010调试发现程序还是在向镜像服务器140发起连接,所以连接失败。

    我在msdn上查了一下相关资料,其中有文章说明,当第一次成功连接到主服务器时,主服务器分返回镜像服务器地址并缓存在程序里,当主服务器故障时程序会连接镜像服务器,那么镜像服务器如果异常时程序还时去连接第一次返回的镜像服务器,导致失败。网址如下:

    Clarification on the Failover Partner in the connectionstring in Database Mirror setup

    不知道有没有人知道怎么解决?

    2013年6月21日 7:36

全部回复

  • 看这个问题还是个难题了
    2013年6月24日 0:26
  • 看来这里没高手呀
    2013年6月25日 0:10
  • 镜像切换后的第一次连接是会失败的,因为ADO.net缓存了数据库连接。再连一次就好了。您可以在您的应用程序里实现重试逻辑。

    2013年6月25日 0:37
    管理员
  • 我们的应用程序很多,不是只有一个程序,而且很多程序都是以前的程序,不可能再修改的。能在不修改程序的前提下切换吗?有什么方法,不可能微软没有这方面的解决方案吧?那也太...
    2013年7月1日 1:54
  • 建议您升级到.NET 4.5。在这个.NET版本中,ADO.NET在镜像服务器切换后帮您自动进行重试。

    您可以在这篇知识库中找到相关信息(Issue 14):

    support.microsoft.com/kb/2533523/en-us

    2014年3月4日 3:01
    管理员