sql server 2012 镜像和出现的问题

镜像安装的环境:

主机:win server 2012 , sql server 2012 ,ip:192.168.1.189  PC账户:administrator
备机:win server 2012 , sql server 2012 ,ip:192.168.1.190  PC账户:administrator
无见证服务器(witness)

 

镜像准备工作:

1.设置主数据库为完整模式 
2.完整备份主数据库并备份数据库的完整日志文件 
3.将备份文件拷贝到镜像数据库并选择还原数据库 (还原选项 norecovery(即不对数据库执行任何操作),镜像数据库现在(正在还原...) 
如图:

sql server 2012 镜像和出现的问题_第1张图片

sql server 2012 镜像和出现的问题_第2张图片

说明:

a.镜像服务器备份的是用户的数据库,不是系统的数据库,比如不能镜像master,msdb,model和tempdb

b.镜像的数据库对象恢复模式必须是完整的,不能是简单和大容量日志类型的

c.备机镜像不能被访问,正常情况下一直处于正在还原的状态

d.主机可以被访问,正常情况下一直处于主体正在同步的状态

e.主机和备机的5022端口必须没有被占用

 

镜像实施:

1.准备工作完成对主数据库开始做镜像
sql server 2012 镜像和出现的问题_第3张图片
2.这里的数据库实例服务账户,最好单独一个账户来管理主数据库与镜像数据库,方便以后数据库的管理.这里要注意确保这里填写的账户可以正常数据库,否则会出问题

sql server 2012 镜像和出现的问题_第4张图片

3.配置完成,如图开始镜像

sql server 2012 镜像和出现的问题_第5张图片

4.主数据库显示(主体,已同步), 镜像数据库显示(镜像,已同步/正在还原...)

sql server 2012 镜像和出现的问题_第6张图片

 

镜像出现的问题:

1.服务器网络地址 “TCP://xxx:5022″ 无法访问或不存在。请检查网络地址名称,并检查本地和远程端点的端口是否正常运行。 (Microsoft SQL Server,错误: 1418)

  后来在SQLServer日志中看到了如下错误:  Database mirroring connection error 4 ‘An error occurred while receiving data: ’10054(远程主机强迫关闭了一个现有的连接。)’.’ for ‘TCP://xxx:5022′.

 通过这个错误找到了问题,c:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\ 没有读写权限,一看真的是这样,加入管理员(即sqlserver的运行用户)的读写权限后一切正常!(如果还不行,配置权限后,再重新配置镜像)

 具体见:http://dba.stackexchange.com/questions/6222/mirroring-problems-after-removing-domain

2.TCP://xxx:5022 的数据库镜像连接错误 5 'Connection handshake failed. The login 'ZBIAN\Administrator' does not have CONNECT permission on the endpoint. State 84.'。

 在日志中看到如上这个错误,发现是因为镜像数据库实例没有权限

 对主数据库与镜像数据库进行了调整,主数据库与镜像数据库使用相同的实例账户,并重新启动数据库服务SQL Server (MSSQLSERVER)

 

镜像可用性解决办法:

1.主体与镜像转换

--主机
use master;
alter database dataName set partner failover;
执行成功后原主体数据库会显示正在还原,备机数据库显示主体正在同步字样
 
2. 测试主备切换
主机崩溃,强制备机当主机,原主机恢复后再切换回去
主机A
备机B
此时,在B机上执行
use master;
alter database dataName set partner FORCE_SERVICE_ALLOW_DATA_LOSS; --强制接收
停止主机A的SQL SERVER 服务(比如断电),此时备机上的数据库会显示正在恢复状态,大概持续几十秒,最后变成
dataName(主体,已断开链接),即现在的镜像B可以用来充当主机了
假如现在有业务往数据库里插也是能成功的
现在把原主机A恢复(通电),然后在B机里操作
use master;
alter database dataName set partner resume;
此时A机是作为镜像的,B机是作为主机的,要再切换一下,则再在B上执行
alter database dataName set partner failover; 

 

你可能感兴趣的:(sql,server)