镜像安装的环境:
主机: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(即不对数据库执行任何操作),镜像数据库现在(正在还原...)
如图:
说明:
a.镜像服务器备份的是用户的数据库,不是系统的数据库,比如不能镜像master,msdb,model和tempdb
b.镜像的数据库对象恢复模式必须是完整的,不能是简单和大容量日志类型的
c.备机镜像不能被访问,正常情况下一直处于正在还原的状态
d.主机可以被访问,正常情况下一直处于主体正在同步的状态
e.主机和备机的5022端口必须没有被占用
镜像实施:
1.准备工作完成对主数据库开始做镜像
![](https://images0.cnblogs.com/blog/392771/201307/10032730-193e0cc3fde442cf858a8f6daef8dfc7.jpg)
2.这里的数据库实例服务账户,最好单独一个账户来管理主数据库与镜像数据库,方便以后数据库的管理.这里要注意确保这里填写的账户可以正常数据库,否则会出问题
3.配置完成,如图开始镜像
4.主数据库显示(主体,已同步), 镜像数据库显示(镜像,已同步/正在还原...)
镜像出现的问题:
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:ProgramDataMicrosoftCryptoRSAMachineKeys 没有读写权限,一看真的是这样,加入管理员(即sqlserver的运行用户)的读写权限后一切正常!(如果还不行,配置权限后,再重新配置镜像)
具体见:http://dba.stackexchange.com/questions/6222/mirroring-problems-after-removing-domain
2.TCP://xxx:5022 的数据库镜像连接错误 5 'Connection handshake failed. The login 'ZBIANAdministrator' does not have CONNECT permission on the endpoint. State 84.'。
在日志中看到如上这个错误,发现是因为镜像数据库实例没有权限
对主数据库与镜像数据库进行了调整,主数据库与镜像数据库使用相同的实例账户,并重新启动数据库服务SQL Server (MSSQLSERVER)
镜像可用性解决办法:
1.主体与镜像转换
--主机
use master;
alter database dataName set partner failover;
执行成功后原主体数据库会显示正在还原,备机数据库显示主体正在同步字样
主机崩溃,强制备机当主机,原主机恢复后再切换回去
主机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;