日期:2014-05-18  浏览次数:20646 次

【已苦思7天】数据库镜像配置之疑惑
本人手持邹建的圣书《深入浅出Sql server》,搜遍google,baidu,sogou,youdao,soso等搜索引擎,并日夜苦思持续一周,
仍然无法解决这个必须必须解决的问题,哪位好心人可怜可怜一下我,
我必当终身为奴以身相许(前提是你不嫌弃),以报答解救之恩啊


环境: window2003+ sql server 2008 R2
服务器A:主服务器
服务器B:镜像服务器
证书方式,无见证服务器
源代码:见最下方

问题:
本人使用同一方式在两个服务器测试配置数据库镜像 ,同步成功,然后在另外两个服务器再次配置,出现以下错误:

在镜像服务器执行ALTER DATABASE JX SET PARTNER='...'执行成功
切换到主服务器执行以下语句
ALTER DATABASE JX SET PARTNER = 'TCP://124.172.242.105:5088';

出现错误:

消息 1418,级别 16,状态 1,第 1 行
服务器网络地址 "TCP://124.172.242.105:5088" 无法访问或不存在。请检查网络地址名称,并检查本地和远程端点的端口是否正常运行。


此时计算机日志(两条):
TCP://124.172.242.105:5088 的数据库镜像连接错误 4 'An error occurred while receiving data: '64(指定的网络名不再可用。)'.'。

已经终止对数据库 'JX' 的数据库镜像操作


再次执行语句,错误信息变了(注意:先后两次执行同一语句的错误不一样)提示:

消息 1499,级别 16,状态 1,第 1 行
数据库镜像错误: 状态 1460,严重性 16,状态 1,字符串 JX。



此时计算机日志(三条):


服务器实例 Partner 拒绝了配置请求;有关详细信息,请阅读它的错误日志文件。原因 1460 和状态 1 可能有助于 Microsoft 诊断问题。这是一个短期存在的错误,再次发出请求就可能会成功。请纠正问题的原因(如果发现了的话),然后重试。

数据库镜像错误: 状态 1460,严重性 16,状态 1,字符串 JX。

已经终止对数据库 'JX' 的数据库镜像操作。



并已确保以下内容无问题,本人反侧尝试,但是均失败:
1 登陆名一致性(包括uid)?
2 防火墙或防护软件已经允许了端口
3 数据库与日志备份还原无问题
4 数据库启动服务尝试使用-T1400跟踪标志(根据网络资料提供)
5 sql server 服务均由Network Service登陆
6 先是镜像服务器的执行SET PARTNER通过,再执行主服务器的SET PARTNER,出错, 尝试对调主备服务器,均发现在主服务器执行时出错,(由此是否可以断定,与服务器防火墙或一些环境无关?)


SQL code

--===============================================
 --主服务器执行
 --===============================================
USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'abc@2010';
go

CREATE CERTIFICATE Cert_A 
WITH SUBJECT = 'HOST_A certificate' , 
START_DATE = '20110101',
EXPIRY_DATE = '20990101'
go

BACKUP CERTIFICATE Cert_A TO FILE = 'D:\快盘\Cert_A.cer';
go


CREATE ENDPOINT Endpoint_Mirroring 
STATE = STARTED 
AS 
TCP ( LISTENER_PORT=5088 , LISTENER_IP = ALL ) 
FOR 
DATABASE_MIRRORING 
( AUTHENTICATION = CERTIFICATE Cert_A , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
go

--===============================================
 --镜像服务器执行
 --===============================================
USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'abc@2010';

CREATE CERTIFICATE Cert_B
WITH 
SUBJECT = 'HOST_B certificate' , 
START_DATE = '20110101',
EXPIRY_DATE = '20990101'
go

BACKUP CERTIFICATE Cert_B TO FILE = 'E:\快盘\Cert_B.cer';
go

CREATE ENDPOINT Endpoint_Mirroring 
STATE = STARTED 
AS 
TCP ( LISTENER_PORT=5088 , LISTENER_IP = ALL ) 
FOR 
DATABASE_MIRRORING 
( AUTHENTICATION = CERTIFICATE Cert_B , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
go

--复制Cert_A到镜像服务器,复制Cert_B到主服务器

--===============================================
 --主机执行
 --===============================================
 
CREATE CERTIFICATE cert_B FROM FILE = 'D:\快盘\Cert_B.cer';
go

CREATE LOGIN loginToB FROM CERTIFICATE cert_B;
go

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO loginToB;
go

--===============================================
 --镜像服务器执行
 --===============================================
CREATE CERTIFICATE cert_A FROM FILE = 'E:\快盘\Cert_A.cer';
go

CREATE LOGIN loginToA FROM CERTIFICATE cert_A;
go

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO loginToA;
go
 
 
 --服务器环境配置完毕,下面开始操作数据库
 
 
--===============================================
 --主服务器执行
 --===============================================
--设置数据库完全备份模式
alter database JX set recovery full
go

--备份
backup database JX to disk=N'D:\快盘\JX.bak' with format
go

BACKUP LOG JX 
    TO DISK = 'D:\快盘\JX_log.bak' 
GO

--===============================================
 --镜像服务器执行
 --===============================================
 
--还原数据库,若路径有修改,需要move
 RESTORE DATABASE JX
   FROM DISK='E:\快盘\JX.bak'
   WITH NORECOVERY, 
      MOVE 'JX' TO