您的位置:首页 > 数据库

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

2009-09-01 18:12 471 查看
如果两个服务器不是在同一个域中, 并且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];启动镜像!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐