数据库镜像出现“无法访问或不存在"故障的原因和解决方案
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];启动镜像!
这时,你就必须改用证书做端点的身份验证才能将运行起数据库镜像。
现在假设环境:
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];启动镜像!
相关文章推荐
- 解决方案: sqlserver 2008登陆时, 出现服务器主体 "xxxcom" 无法在当前安全上下文下访问数据库 "db_xxx_com"。
- SQLServer 主体设置镜像伙伴失败:服务器网络地址 "TCP://server. domain.com:5022" 无法访问或不存在
- 错误"因为数据库正在使用,所以无法获得对数据库的独占访问权"的解决方案
- 关于数据库还原时出现的因为数据库正在使用,所以无法获得对数据库的独占访问权“的解决方案
- 关于数据库还原时出现的因为数据库正在使用,所以无法获得对数据库的独占访问权“的解决方案
- 关于数据库还原时出现的因为数据库正在使用,所以无法获得对数据库的独占访问权“的解决方案
- SQLServer 导入mdf和ldf文件出现:无法打开物理文件 "D:\XX.mdf"。操作系统错误 5:"5(拒绝访问。)"的解决方案
- 错误"因为数据库正在使用,所以无法获得对数据库的独占访问权"的解决方案
- Android解决"关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase解决方案
- SQL Server 2008R2 数据库出现"可疑"导致无法访问解决办法
- 错误"因为数据库正在使用,所以无法获得对数据库的独占访问权"的解决方案
- (转)错误"因为数据库正在使用,所以无法获得对数据库的独占访问权"的解决方案
- 附加数据库出现“无法打开物理文件 "X.mdf"。操作系统错误 5:"5(拒绝访问。)"
- 解决: sqlserver登陆时, 出现服务器主体 "xxx" 无法在当前安全上下文下访问数据库 "db_xxx"。
- SQL Server 2008R2 数据库出现“可疑”导致无法访问解决办法
- SQL Server 2008 R2数据库出现可疑导致无法访问
- 关于安装.NET Framework 2.0时偶然碰到的问题(提示"Error 205015. 安装程序集..../System.EnterpriseServices.dll失败,原因是出现了系统错误:拒绝访问。")
- 【SQLServer】【恢复挂起的解决方案】附加文件时候的提示“无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的。 ”【数据库恢复】
- 关于“因为数据库正在使用,所以无法获得对数据库的独占访问权”的最终解决方案
- 全国DNS出现大范围故障 三分之二网站无法访问