一、简介
“数据库镜像”是Sql Server 2005推出的一个主要用于提高数据库可用率的软件解决方案。镜像是基于每个数据库执行的,仅适用于使用完整恢复模式的数据库。简单恢复模式和大容量日志恢复模式不支持数据库镜像。
数据库镜像是通过维护一个热备用服务器而发挥作用的。在一般的镜像会话期间,如果生产服务器出现故障,客户端应用程序可以通过重新连接到备用服务器来快速进行恢复。
二、前提条件
1、准备好服务器,保证数据库版本至少是Sql Server 2005 SP1,当然最好是最新版本,老的版本测试不行!
2、保证需要镜像的数据库为完全恢复模式
3、配置域环境,数据库镜像使用域环境会比较方便,感觉比使用证书要省事
4、设置sql server的服务以域账号运行 How?
5、选择镜像方案,镜像服务可以使用三个数据库实例(主、镜像、见证)也可以使用两个数据库实例(主、镜像),实际使用环境中每个实例应该是运行在不同的服务器上。如果使用见证服务器的话好处是可以实现自动的故障转移,但是需要使用3台服务器,而且至少要保证其中2台服务器是可用的,因为如果镜像服务器和见证服务器同时当机,即时主服务器没有任何问题也是无法对外提供服务的。我这里只是为了实现数据库的镜像,做一个实时的数据库备份所以没有使用见证服务器,如果主服务器宕机需要手动切换镜像服务器为主服务器。
三、具体步骤
1、在主服务器完整备份需要镜像的数据库,在镜像服务器以“不对数据库执行任何操作,不会滚未提交的事务。(RESTORE WITH NORECOVERY)”的状态恢复。然后备份事务日志,以相同的恢复状态在镜像服务器恢复事务日志。
2、在主服务器,选择需要镜像数据库的镜像功能,点击“配置安全性”
3、选择否,不包括见证服务器实例
4、选择主体服务器实例
5、选择镜像服务器实例
6、如果主服务器实例和镜像服务器实例是以不同的域账户运行的,需要输入对应的账户,我使用的是相同的账户所以留空,二中有建立帐户的脚步
7、配置完成
8、配置端点
9、点击“开始镜像”,完成
10、如果没有提示任何错误,主服务器的数据库会显示“主体,已同步”,镜像服务器的数据库会显示“镜像,已同步,正在还原…”,数据库镜像服务配置完成
四、故障转移
1、主机备机互换
在主机按“故障转移”按钮就可以了
2、如果主机宕机,需要启用镜像服务器当主服务器
在镜像服务器执行
USE master;
ALTER DATABASE 数据库名 SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
然后按“故障转移”按钮就可以了
五、遇到的错误
1、“消息 1418,级别 16,状态 1,第 1 行 服务器网络地址 "TCP://机器名或IP地址:端口号" 无法访问或不存在。请检查网络地址名称,并检查本地和远程端点的端口是否正常运行。”
这个很有可能是在镜像服务器恢复数据库时没有选择“不对数据库执行任何操作,不会滚未提交的事务。(RESTORE WITH NORECOVERY)”,应该是由于没有权限导致的,也就是在服务器和镜像服务器中没有设置正确的登录名或设置了但提示了警告!
详细解决方法见<二>
2、镜像数据库 "house" 包含的事务日志数据不足,无法保留主体数据库的日志备份链。如果没有从主体数据库进行日志备份或者没有在镜像数据库上还原日志备份,则可能会出现这种情况。(Microsoft SQL Server, 错误: 1478)
出现这个错误是由于没有备份和恢复事务日志
3、默认情况下,数据库镜像是被禁用的。
这个是由于没有打补丁的原因,以为Sql Server 2005刚推出的时候镜像功能是作为评估使用的所以默认是关闭的,SP1以后就可以正式使用了
4、数据库 "house" 的伙伴服务器实例和见证服务器实例均不可用。请在至少其中一个实例变为可用后重新发出命令。
这个问题就比较诡异了,用虚拟机实验完成后在生产环境部属出现此问题,在网上搜了个遍,也没找到解决办法,最后在一个论坛看到也加了跟踪标志1400竟然通过了,可是我已经打了SP3,实在不太明白。
六、跟踪标志
跟踪标志用于临时设置特定服务器的特征或关闭特定行为。 例如,如果启动 SQL Server 2005 的一个实例时设置了跟踪标志 3205,将禁用磁带机的硬件压缩。 跟踪标志经常用于诊断性能问题,或调试存储过程或复杂的计算机系统。具体参见MSDN
http://msdn.microsoft.com/zh-cn/library/ms188396.aspx,不过MSDN好像没有1400的说明,可能比较老了已经没有1400这个标志了,网上搜了一下
1400
启用数据库镜像端点的创建功能,在设置和使用数据库镜像时必须使用该功能。启用数据库镜像端点的创建功能,在设置和使用数据库镜像时必须使用该功
能。只有在启动服务器实例时使用了 -T trace# 启动选项,才可以设置该跟踪标志。
设置方法:
DBCC TRACEON (1400)或者在数据库服务加启动参数-T1400