我三台服务器A,B,C,装了SQL2008, 初始配置数据库为:A主体,B镜像,C见证,配置为自动故障转移的运行模式.
在另外一台服务器D上运行ASP.NET应用程序,连接字符串设置为:
Data Source=A;Failover Partner=B;Initial Catalog=dbname;User Id=sa;Password=xxx;程序启动时,如果数据库A为镜像,B为主体时, 断开服务器B的连接, 数据库A变成主体, ASP.NET程序在报告一次错误后刷新时会自动连接A, 这过程几秒就能完成. 这没有问题.但问题就出在这: 如果程序启动时A为主体,B为镜像时, 断开服务器A的连接, 这里数据库B自动切换成主体提供服务, 但ASP.NET程序需要刷新, 好几分钟才会自动转移连接到B.请问: 我哪里弄错了吗?

解决方案 »

  1.   

    数据库用户名,登录名等都已经配置好且没有问题. 实际中服务器A,B是用内网IP+端口(192.168.x.x,1433)方式表示的, 默认端口1433已经改成了其它端口.
      

  2.   

    如果程序启动时A为主体,B为镜像时, 断开服务器A的连接, 这里数据库B自动切换成主体提供服务, 但ASP.NET程序需要刷新, 好几分钟才会自动转移连接到B. 
    按说正常的镜像应该在秒一级别就可以完成了。
    看楼主描述的状况,应该是外围IP配置的问题。 A(mirror) B(Principle)的状况可以顺利处理的话,建议楼主检测下DNS配置是否一致!
      

  3.   

    都是双网卡机器, 互连用的内网IP地址, 没有配置网关与DNS.
      

  4.   

    但问题就出在这: 如果程序启动时A为主体,B为镜像时, 断开服务器A的连接, 这里数据库B自动切换成主体提供服务, 但ASP.NET程序需要刷新, 好几分钟才会自动转移连接到B. 贴一下断开A后,B的log有没有什么信息?
      

  5.   

    哪个log? 事件查看器?
    禁用A机网卡后,B机事件查看器里能看到这几条。这应该是正常的。但在不恢复A连线的情况下,程序需要3分钟左右的时间才能自动切换连接到B。 B为主体A为镜像时禁用B的网卡时程序切换很快,10秒以内。莫非连接字符串中Data Source=A;Failover Partner=B;这里还分A,B的先后或优先级的?
      

  6.   

    ADO.NET 2.0吗?打上这个补丁看看。
     http://support.microsoft.com/?scid=kb%3Ben-us%3B912151&x=4&y=11
      

  7.   

    对. ADO.NET 2.0, SQL Server 2008标准版
      

  8.   


    下载了这个补丁, 安装时提示: Windows Installer 服务不能安装此升级修补程序,因为找不到要升级的程序,或者升级修补程序可能更新的是不同版本的程序……可能我这装的是.NET 2.0打了SP2的补丁了, 这补丁不能用了......
      

  9.   

    我也遇到类似的问题,如果你有找到解决方法,麻烦也告知一下。
    我认为可能的原因是:
    1. 服务器的网络连接可能有问题
    2. 我使用的是sp2,可能sp2都有这个问题,我在其它机器上使用sp3是正常的,因为目前的服务器是有运行正式程序,所以不方便升级到sp3,这个部分没去测试
    3. 是否与window2003系统有关,或是多核有关(可能性不大)问题的具体表现:当主体服务器的DB服务停止时,原镜像服务器已经变成了主体,但ado.net还是去连接原主体服务器,所以会导致连接不上,但过了一段时间就可以了,这时间大概是1分钟以上
      

  10.   

    这里有朋友说打补丁,但补丁装不了,服务器上的.net framework版本是3.5的,而补丁是06年出的,按理说.net3.5已经把该问题修复了
      

  11.   

    我的证书没有过期,估计是连接池问题,我得到一位网友的帮助,连接字符串中,server与Failover Partner的地址对换一下,这样可以解决主体出问题时,备机切换成主体后可以被正常连接。不过当原主体服务器恢复后,没有手动切换成主体,备机(此时为主体)出故障,则会导致之前的问题。我在本地测试一切正常,本地的版本是SQL2005开发版sp3,服务器使用的是SQL2005企业版sp2,估计是版本问题吧。不知SQL2008是否也存在该问题!!有知道的朋友也麻烦提供一些建议!感谢!