一:前言
SQL SERVER数据库镜像其实是对一个数据库建立一个副本,并保持主数据库和副本数据库数据的同步。这样当主数据库遇到问题需要停止运行,就可以切换到副本数据库继续工作,保持系统的持续可用。主数据库称为"主体(principal)",而副本数据库成为"镜像(mirror)"。而主体和镜像之间互称为“伙伴(partner)”。主体和镜像相互切换这个动作称作"角色切换(role switching)",或者叫做"故障转移(failover)"。另外为了能在遇到问题后自动执行角色切换,可以加入一个见证服务器"witness"。见证服务器监视着主体和镜像,当发现主体不能访问时,则自动的执行角色切换动作,将镜像数据库切换为主体,继续提供数据服务。
在“怎样配置数据库镜像”这个问题前,先来弄清楚一下“要配置什么”及“为什么这样配置”这两个问题。
镜像的整个配置,其实就是解决一个“如何通信”的问题:
1.镜像间的通信是通过端点(endpoint)进行的。端点指定了伙伴间或者伙伴与见证服务器间的通信协议,端口,验证方式和数据加密算法等等。
2.有了端点的同时,在主体,镜像和见证服务器上还要分别添加用于对方登录的登录名和用户,并赋予这些登录名一个连接端点的权限。
3.另外在非域环境中,需要使用证书来确保连接的安全,因此,需要创建和使用证书。
二:具体配置
本次配置中,cruze为主体服务器系统名称,supra是镜像服务器系统名称,nissan-gtr是见证服务器系统名称
use master go --设置数据库的恢复模式为“完整恢复” alter database test set recovery full --****配置一:创建证书****---------- --创建主密匙 create master key encryption by password='123' --创建证书 create certificate cruze_cer with subject='cruze_cer' --将证书备份至文件,并且拷贝到镜像和见证服务器上 --(主体,镜像和见证服务器均要有其他任意一方的证书,以便为对方创建入站连接时能关联证书) backup certificate cruze_cer to file='c:\cruze_cer.cer' go --************************---------- --******配置二:创建端点****** create endpoint endpoint_supra state=started as tcp(listener_port=5022,listener_ip=all) for database_mirroring(authentication=certificate supra_cer,encryption=required algorithm aes,role=all) go --************************---------- --******配置三:创建端点****** --为镜像和见证服务器创建登录名和用户。 create login login_for_cruze with password='123' create user user_for_cruze for login login_for_cruze --以对方的证书文件创建证书,并将证书与该用户关联起来。 create certificate cert_supra authorization user_for_cruze from file='c:\cruze_cer.cer' --不要忘记赋予该登录名连接端点的权限 grant connect on endpoint::endpoint_supra to login_for_cruze --************************---------- --三大步骤配置完成,但以上代码仅仅是针对主体服务器的配置,另外需要在镜像和见证服务器上进行同样原理的配置 ----备份主体服务器上的数据库和日志,并将备份文件拷贝到镜像服务器上 backup database test to disk='c:\test.bak' backup log test to disk='c:test_log.bak' --在镜像服务器上回复数据库(可能还要回复日志)。必须使用with norecovery子句,但是否覆盖(replace)则按情况而定 restore database test from disk='c:\test.bak' with norecovery,replace restore log test from disk='c:\test_log.bak' with norecovery --最后设置伙伴的通信地址(在主体服务器和镜像服务器上都要执行) alter database test set partner='tcp://supra:5022' --并在主体服务器上设置见证服务器 alter database test set witness='tcp://nissan-gtr:5022' --停止镜像 alter database test set partner off --故障转移(角色切换) alter database test set partner failover
在整个配置过程中,难免会出现一些错误,特别是在建立端点后,主体,镜像和见证服务器不能相互连接的错误。出现这些情况时,sql server提供的可用的信息非常少。可以查看本系统或者目标系统
上的事件日志中查看日志记录,往往能得到非常明确的错误信息。
主题服务器是如何与镜像服务器同步数据的:(msdn)在数据库镜像方案中,数据库(主体数据库)的每次更新都在独立的、完整的数据库(镜像数据库)副本中立即重新生成。主体服务器实例立即将每个日志记录发送到镜像服务器实例,镜像服务器实例将传入的日志记录应用于镜像数据库,从而将其继续前滚。