本人手持邹建的圣书《深入浅出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 = [email protected]';goCREATE CERTIFICATE Cert_A WITH SUBJECT = 'HOST_A certificate' , START_DATE = '20110101',EXPIRY_DATE = '20990101'goBACKUP CERTIFICATE Cert_A TO FILE = 'D:\快盘\Cert_A.cer';goCREATE 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 = [email protected]';CREATE CERTIFICATE Cert_BWITH SUBJECT = 'HOST_B certificate' , START_DATE = '20110101',EXPIRY_DATE = '20990101'goBACKUP CERTIFICATE Cert_B TO FILE = 'E:\快盘\Cert_B.cer';goCREATE 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';goCREATE LOGIN loginToB FROM CERTIFICATE cert_B;goGRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO loginToB;go--=============================================== --镜像服务器执行 --===============================================CREATE CERTIFICATE cert_A FROM FILE = 'E:\快盘\Cert_A.cer';goCREATE LOGIN loginToA FROM CERTIFICATE cert_A;goGRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO loginToA;go --服务器环境配置完毕,下面开始操作数据库 --=============================================== --主服务器执行 --===============================================--设置数据库完全备份模式alter database JX set recovery fullgo--备份backup database JX to disk=N'D:\快盘\JX.bak' with formatgoBACKUP LOG JX TO DISK = 'D:\快盘\JX_log.bak' GO--=============================================== --镜像服务器执行 --=============================================== --还原数据库,若路径有修改,需要move RESTORE DATABASE JX FROM DISK='E:\快盘\JX.bak' WITH NORECOVERY, MOVE 'JX' TO 'D:\Database\JX.mdf', MOVE 'JX_Log' TO 'D:\Database\JX.ldf';GO--还原日志, file=1表示第一份日志,如果多份,需重复执行RESTORE LOG JX FROM DISK = 'E:\快盘\JX_log.bak' WITH FILE=1, NORECOVERY --配置数据库镜像,先在镜像服务器执行 ALTER DATABASE JX SET PARTNER = 'TCP://ip:5088'; --=============================================== --主服务器执行 --===============================================ALTER DATABASE JX SET PARTNER = 'TCP://ip:5088';