none
如何解决镜像数据库与见证服务器已断开连接 RRS feed

  • 问题

  • 在数据库镜像监视器中显示:主体服务器与镜像连接已成功,主体服务器与见证服务器连接也成功了,但是镜像服务器与见证服务器却显示已断开连接.


    找了半天资料都没有发现此问题的原因,有什么方法能解决这个问题呢?

    2011年6月1日 2:34

答案

全部回复

  • 你好,

    首先,请确认数据库镜像服务器和见证服务器可以通过网络互相访问。其次,检查这个两个服务器的登录账户是否在对方服务器的端点上被授予了CONNECT的权限。

    详细信息,请参考:数据库镜像部署故障排除

     


    Best Regards,
    Stephanie Lv

    2011年6月1日 5:47
  • 可以检查一下 见证服务器的 ERRORLOG , 看看是否有login失败的记录, 或者看看是否有连接从镜像服务器连接上来

    If you think my suggestion is useful, please rate it as helpful.
    If it has helped you to resolve the problem, please Mark it as Answer.
    http://twitter.com/7Kn1ghts

    2011年6月1日 10:48
  • 已经可以确保数据库镜像服务器B和见证服务器C是可以通过网络互相访问的,我是让见证服务器C做 主体服务器,和先前的镜像服务器B组成一对镜像伙伴,从镜像监视器中可以看到,两台机器都可以互访.

    但是一旦加入第3台机器,如我的主题,见证服务器C与镜像服务器B显示已断开连接.


    见证服务器C上打开sql server profiler,在主题服务器上执行

    ALTER DATABASE Test1 SET witness = 'TCP://192.168.1.150:7039';

    是没有捕获到任何追踪的

     

    关于两个服务器的登录账户是否在对方服务器的端点上被授予了CONNECT的权限。

    这个应该怎么检查?

    我用

    SELECT 'Metadata Check';
    SELECT EP.name, SP.STATE, 
      CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id)) 
       AS GRANTOR, 
      SP.TYPE AS PERMISSION,
      CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id)) 
       AS GRANTEE 
      FROM sys.server_permissions SP , sys.endpoints EP
      WHERE SP.major_id = EP.endpoint_id
      ORDER BY Permission,grantor, grantee; 
    GO
    

    在见证服务器上运行,结果如下:

    endpoint_mirroring    G    20110407-0927\Administrator    CO      M_149
    endpoint_mirroring    G    20110407-0927\Administrator    CO      M_150
    endpoint_mirroring    G    20110407-0927\Administrator    CO      M_122

    在见证服务器150上有一个创建帐号代码,其中M_122是主体服务器上的登录名,M_149是镜像服务器上的登录名,M_150是见证服务器上的登录名:

    CREATE LOGIN M_122 WITH PASSWORD = 'M_Test';
    CREATE USER M_122 for LOGIN M_122
    
    CREATE CERTIFICATE T122_Cert
      AUTHORIZATION M_122
      FROM FILE = '<证书路径>'
    
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO M_122;
    GO
    
    CREATE LOGIN M_149 WITH PASSWORD = 'M_Test';
    CREATE USER M_149 for LOGIN M_149
    
    CREATE CERTIFICATE T149_Cert
      AUTHORIZATION M_149
      FROM FILE = '<证书路径>'
    
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO M_149;
    GO<br/><br/>CREATE LOGIN M_150 WITH PASSWORD = 'M_Test';
    CREATE USER M_150 for CERTIFICATE T150_Cert;
    
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO M_150;<br/>GO
    

    (后缀150表示见证服务器,后缀149是镜像服务器,后缀122是主题服务器)其它两台机器上也执行了上面类似的代码

    能否帮我分析下,是哪里出了问题吗?

     

    2011年6月8日 2:25
  • Is port 7039 open between 2 servers?
    2011年6月8日 3:32
  • 3台机器上都用7039作为镜像端口号

    见证服务器上执行了下面代码:

     

    create endpoint endpoint_mirroring
    state=started
    as tcp(listener_port=7039,listener_IP=all)
    for database_mirroring
    (
     role=all,
    	authentication=certificate T150_Cert
    );
    
    
    

     

    镜像服务器上执行了下面代码:

    CREATE ENDPOINT endpoint_mirroring
     STATE = STARTED
     AS TCP ( LISTENER_PORT = 7039,listener_IP=all)
     FOR DATABASE_MIRRORING
     ( 
     ROLE=partner,
     AUTHENTICATION = CERTIFICATE T149_Cert
     );
    
    


    主体服务器上执行了下面代码:

    CREATE ENDPOINT endpoint_mirroring
     STATE = STARTED
     AS TCP ( LISTENER_PORT = 7039,listener_IP=all)
     FOR DATABASE_MIRRORING
     ( 
     ROLE=PARTNER,
     AUTHENTICATION = CERTIFICATE T122_Cert
     );
    
    
    

    2011年6月8日 5:28
  • 可以 telnet 192.168.1.150 7039 做测试端口是否打开

    If you think my suggestion is useful, please rate it as helpful.
    If it has helped you to resolve the problem, please Mark it as Answer.
    http://twitter.com/7Kn1ghts

    2011年6月8日 8:20
  •  在命令行中输入 telnet 192.168.1.150 7039 ,无任何反应,一片黑.

    我觉得不是端口的问题,因为把见证服务器改成主体服务器,是可以组成镜像的.

    我认为应该是权限问题,但是按照上面给出的脚本,我看不出哪里有问题

    2011年6月9日 3:22
  • All servers have same version?
    2011年6月9日 3:39
  • 三台机器配置都是

    xp SP3

    SqlServer2005 Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   Copyright (c) 1988-2005 Microsoft Corporation  Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

    2011年6月9日 3:53
  • Are they in same domain? If you use certificate, books online has instructions under 'Using Certificates for Database Mirroring', 'How to: Allow Database Mirroring to Use Certificates for Outbound Connections (Transact-SQL)' and 'How to: Allow Database Mirroring to Use Certificates for Inbound Connections (Transact-SQL)'.
    • 已标记为答案 Dic4000 2011年7月4日 1:48
    2011年6月9日 14:18
  • 是用的证书没有用域,是参考books online步骤来弄的
    2011年6月10日 2:50
  • 在见证服务器上的日志中查到如下信息: The server instance Witness rejected configure request; read its error log file for more information. The reason 1451, and state 3, can be of use for diagnostics by Microsoft. This is a transient error hence retrying the request is likely to succeed. Correct the cause if any and retry.
    2011年6月10日 6:43
    • 已标记为答案 Dic4000 2011年7月4日 1:47
    2011年6月10日 13:32