数据库镜像出现“无法访问或不存在"故障的原因和解决方案

如果两个服务器不是在同一个域中, 并且sql server服务不是用域用户做为启动服务的身份。那么在做数据库镜像很可能收到如标题所示的错误。

这时,你就必须改用证书做端点的身份验证才能将运行起数据库镜像。

现在假设环境:
Host_A为主服务器,Host_B为镜像服务器。
已经按要求进行将Host_A的目标数据库备份,并在Host_B中还原。
通过UI界面已经配置好镜像,端点的端口两边都是5022,名称都为[镜像]。
防火墙的相关端口已经打开,SQL Server的TCP/IP协议已经启用。

步骤一
在Host_A上执行
USE  master;
GO
// 在 master 数据库中,创建数据库主密钥(如果需要)。
CREATE  MASTER  KEY  ENCRYPTION  BY  PASSWORD  =   ' password ' ;
GO
CREATE  CERTIFICATE HOST_A_cert 
   
WITH  SUBJECT  =   ' HOST_A certificate ' ;
GO
/* ***** Object:  Endpoint [镜像]    Script Date: 09/01/2009 17:44:54 ***** */
IF    EXISTS  ( SELECT   *   FROM  sys.endpoints e  WHERE  e.name  =  N ' 镜像 '
DROP  ENDPOINT  [ 镜像 ]
GO
/* ***** Object:  Endpoint [镜像]    Script Date: 09/01/2009 17:44:54 ***** */
CREATE  ENDPOINT  [ 镜像 ]  
    
AUTHORIZATION   [ sa ]
    STATE
= STARTED
    
AS  TCP (LISTENER_PORT  =   5022 , LISTENER_IP  =   ALL )
    
FOR  DATA_MIRRORING (ROLE  =  PARTNER, AUTHENTICATION  =  CERTIFICATE HOST_A_cert
, ENCRYPTION 
=  REQUIRED ALGORITHM RC4)
GO
BACKUP  CERTIFICATE HOST_B_cert  TO   FILE   =   ' D:\Data\HOST_A_cert.cer ' ;

步骤二
在Host_B上执行
// 在 master 数据库中,创建数据库主密钥(如果需要)。
CREATE  MASTER  KEY  ENCRYPTION  BY  PASSWORD  =   ' password ' ;
GO
CREATE  CERTIFICATE HOST_B_cert 
   
WITH  SUBJECT  =   ' HOST_B certificate ' ;
GO
/* ***** Object:  Endpoint [镜像]    Script Date: 09/01/2009 17:44:54 ***** */
IF    EXISTS  ( SELECT   *   FROM  sys.endpoints e  WHERE  e.name  =  N ' 镜像 '
DROP  ENDPOINT  [ 镜像 ]
GO
/* ***** Object:  Endpoint [镜像]    Script Date: 09/01/2009 17:44:54 ***** */
CREATE  ENDPOINT  [ 镜像 ]  
    
AUTHORIZATION   [ sa ]
    STATE
= STARTED
    
AS  TCP (LISTENER_PORT  =   5022 , LISTENER_IP  =   ALL )
    
FOR  DATA_MIRRORING (ROLE  =  PARTNER, AUTHENTICATION  =  CERTIFICATE HOST_B_cert
, ENCRYPTION 
=  REQUIRED ALGORITHM RC4)
GO
BACKUP  CERTIFICATE HOST_B_cert  TO   FILE   =   ' D:\Data\HOST_B_cert.cer ' ;
GO

步骤三
复制HOST_A_cert.cer到Host_B,复制复制HOST_B_cert.cer到Host_A

步骤四
在Host_A上执行
USE  master;
CREATE  LOGIN HOST_B_login  WITH  PASSWORD  =   ' password ' ;
GO
CREATE   USER  HOST_B_user  FOR  LOGIN HOST_B_login;
GO
CREATE  CERTIFICATE HOST_B_cert
   
AUTHORIZATION  HOST_B_user
   
FROM   FILE   =   ' D:\backup\HOST_B_cert.cer '
GO
GRANT  CONNECT  ON  ENDPOINT:: [ 镜像 ]     TO   [ HOST_B_login ] ;

步骤五
在Host_B上执行
USE  master;
CREATE  LOGIN HOST_A_login  WITH  PASSWORD  =   ' password ' ;
GO
CREATE   USER  HOST_A_user  FOR  LOGIN HOST_A_login;
GO
CREATE  CERTIFICATE HOST_A_cert
   
AUTHORIZATION  HOST_A_user
   
FROM   FILE   =   ' D:\backup\HOST_A_cert.cer '
GO
GRANT  CONNECT  ON  ENDPOINT:: [ 镜像 ]     TO   [ HOST_A_login ] ;
启动镜像!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值