数据库镜像
相对于日志传送,数据库镜像显然更高一级。在最简单的形式下,它其实与日志传送的
工作原理相似,但是生产服务器发送事务到镜像服务器的频率要高得多,这意味着更新速度
也要快很多。
对于数据库镜像来说,故障转移功能也是需要手动完成。但是你可以添加第三个SQL
Server,称为witness。Witness
可以作为一个普通的SQL Server,但是一直留意着其它两个
镜像服务器。当主镜像发生故障,witness
可以让第二个镜像接管操作,类似一种自动的故
障转移。
在故障转移时,任何进行中的客户端事务都将重新启动,而由于在这一过程中仍然存在
着延迟,镜像服务器也不能保证百分之百不丢失数据。
一.
数据库准备
一、目标
利用Sql
Server 2008 enterprise
X64,建立异步(高性能)镜像数据库,同时建立见证服务器
实现自动故障转移。
二、前提条件、限制和建议
1、伙伴双方(主体服务器和镜像服务器)及见证服务器必须使用相同版本的Sql
Server
2、如使用见证服务器,择须确保其系统上安装 Sql Server 2005
或更高版本
3、在镜像服务器上创建镜像数据库时,确保制定相同的数据库名称WITH NOREBOVORY 来
还原主题数据库备份。另外,还必须通过
WITH NORECOVERY
应用在该备份执行后创建的所
有日志备份。如果数据库镜像已经停止,则必须将对主体数据库执行的所有后续日志备份应
用到镜像数据库中,然后才可以重新启动镜像。
4、跨数据库事务和分布式事务均不支持数据库镜像
5、镜像的数据库路径尽量与主体服务相同,如果主体服务器CPU
利用率在50%以上,择不
建议配置自动故障转移
6、建议配置高效稳定的网络环境
三、设置概述
1、确保所有数据库用户在镜像服务器上都有登录名
2、在向另一个服务器实例提供数据库之前,您必须在该服务器实例上建立数据库用于新服
务器实例时所需的环境
3、使用
NORECOVERY
还原最近的主体数据库完整备份,以创建镜像数据库。确保执行备
份时主体数据库已使用完整恢复模式。镜像数据库和主体数据库名称必须相同,并且它们在
数据库镜像会话中不能被重命名。
4、设置安全性并启动数据库镜像会话。可以使用
Transact-SQL 或数据库镜像向导来设置镜
像。
5、(可选)将见证服务器添加到会话。
四、在Windows Server 2008
R2上安装Sql Server 2008 enterprise X64
1、SQL Server 2008 需要.NET
3.5支持,所以安装之前需要安装.NET3.5,在服务器管理的功能单元中,添加.NET Framework 3.5.1功能
2、安装时选择全新SQL
Server独立安装
3、选定功能组件,注意安装目录与其他节点保持一致
4、使用默认实例名称,或者与其他节点相同
5、设定服务启动账户,这里配置所有服务均使用域管理启动
6、设置混合身份登录、制定SQL
Server管理员
7、点击下一步,等待安装完成。在其他节点按照同样方式安装SQL Server
五、配置数据库镜像前的数据库准备
1、
确认数据库使用了完整恢复模式:打开SQL Server
Management,在VirtualManagerDB数据库(将要镜像的数据库)上点击右键选择属性,定位到选项页,将恢复模式改为“完整”
2、
备份主体数据库:在VirtualManagerDB数据库上点击右键——任务——备份,备份类型选择完整
3、将备份文件拷贝到镜像节点,执行还原。右键点击数据库,选择还原数据库,选定备份文件,写入还原数据库名称,注意此数据库名称必须与主体服务器数据库名称一致。即VirtualManagerDB。
点击选项页,勾选覆盖现有数据库。选择NORECOVERY模式
4、进行完整日志备份
执行backup
LOG VirtualManagerDB to Disk =
‘c:\backup\vlogback.bak‘
5、同样,事务日志备份在镜像数据库上还原。镜像数据库上,点击右键——任务——还原——事务日志
6、在还原选项中选中NORECOVERY,执行还原操作。
二.配置镜像连接
一、设置安全性并启动数据库镜像会话
1、展开数据库,选择VirtualManagerDB,点击右键选择任务——镜像
2、点击配置安全性,点选是,包括见证服务器
3、去掉见证服务器,以后进行配置
4、设置主体服务器,填入端点名称为site1
5、添加镜像服务器,取端点名为site2
6、指定服务账户为域管理员账户(可以在域内事先配置)
7、创建成功,点击关闭
8、弹出对话框,选择不开始开始镜像
9、点选高性能模式的运行模式,点击开始镜像,查看状态显示已经同步
10、同步完成后,显示如下
至此,镜像配置完毕,接下来开始测试故障转移
二、手动故障转移测试
1、主体数据库上点击右键——任务——镜像
更改运行模式为高安全性(在高可用模式下不能进行手动故障转移)
点击右侧故障转移,提示断开所有与主体数据库的链接
1、
点击是,开始向镜像数据库还原,下图为正在执行镜像过程
4、
此时显示镜像已近完成,主体数据库被转移到了原来的镜像数据库HYTEST02。整个过程1秒钟内完成
部署见证服务器,实现自动故障转移。
一、关于见证服务器
1、若要支持自动故障转移,必须在高安全性模式下配置数据库镜像会话,并且还要具有第三个服务器实例(也称为“见证服务器”)。见证服务器是
SQL Server
的可选实例,它能使高安全性模式会话中的镜像服务器识别出是否要启动自动故障转移。与这两个伙伴不同的是,见证服务器并不能用于数据库。见证服务器的唯一角色是支持自动故障转移。
2、为了给数据库设置见证服务器,数据库所有者为见证服务器的角色分配数据库引擎实例。见证服务器实例可以与主体服务器实例或镜像服务器实例运行于同一台计算机上,但这样会明显降低自动故障转移的可靠性。因此建议见证服务器应位于另外一台计算机上。
3、在高性能模式下,见证服务器对可用性会有不利影响。如果见证服务器是针对数据库镜
像会话而配置,则主体服务器必须至少连接到一个其他服务器实例,即镜像服务器或见证服务器,或者是连接到这两个服务器。否则,将无法使用数据库,并且不能进行强制服务(可能丢失数据)。因此,对于高性能模式,我们极力建议您始终将见证服务器设置为
OFF。
二、关于自动故障转移
1、只有在高安全性模式(“具有自动故障转移功能的高安全性模式”)下运行并且具有见证服务器的数据库镜像会话支持自动故障转移。在具有自动故障转移功能的高安全性模式下,同步数据库后,如果主体数据库变得不可用,则会发生自动故障转移。自动故障转移将导致镜像服务器接管主体服务器的角色,并使其数据库的副本联机以作为主体数据库。因为每个在主体数据库中提交的事务同时也在镜像数据库中提交,所以需要使数据库保持同步以防止在故障转移过程中丢失数据。
2、自动故障转移所需条件
A、数据库镜像会话必须在高安全性模式下运行,并且必须处理见证服务器。
B、镜像数据库必须已经同步。这将保证发送到镜像服务器的所有日志都已写入磁盘。
C、主体服务器已中断了与其余数据库镜像配置的通信,而镜像服务器和见证服务器将保留仲裁。但是,如果所有服务器实例都已中断通信,而见证服务器和镜像服务器稍后重新建立通信,则不会发生自动故障转移。
D、镜像服务器已检测到丢失了主体服务器
E、镜像服务器检测主体服务器故障的方式取决于故障是硬故障还是软故障。
更多自动故障转移内容参考:http://msdn.microsoft.com/zh-cn/library/ms189590.aspx
三、自动故障转移原理
1、如果主体服务器仍在运行中,则将主体数据库的状态更改为
DISCONNECTED
并断开所有客户端与主体数据库的连接。
2、见证服务器和镜像服务器将主体服务器注册为不可用。
3、如果重做队列中有任何等待的日志,则镜像服务器将完成前滚镜像数据库的操作
4、前一个镜像数据库作为新的联机主体数据库,恢复通过尽快回滚未提交的事务将这些事务全部清除。锁将隔离这些事务。
5、当前一个主体服务器重新联接到会话时,它将认定其故障转移伙伴现在拥有主体角色。前一个主体服务器接管镜像角色,并将其数据库作为镜像数据库。新的镜像服务器会尽快将新的镜像数据库与主体数据库同步。新的镜像服务器重新同步数据库后,就可以再次执行故障转移,但按反向执行。。
下图说明了自动故障转移的一个实例。
四、在见证服务器上看装SQL
Server
2008
详见前一
五、配置见证服务器
1、主体数据库服务器上,右键点击数据库,选择任务——镜像
2、在弹出的数据库属性页面中,选定镜像页,点击右侧的配置安全
3、点击下一步,选择包括见证服务器
4、点击下一步,进行见证服务器配置
5、点击两次下一步,填入见证服务器地址或机器名及站点名称
6、填入服务账户
7、查看摘要信息,点击完成
六、测试自动故障转移
1、当前主体服务器为Hytest01,镜像数据库是Hytest02
2、将主体服务器Hytest1的网络断开,看数据库是否自动转移到镜像服务器Hytest02上
镜像设置显示,主体服务器、镜像服务器角色也互换了。
有人会说,两个数据库,IP地址都不一样,怎么写连接代码呢?难道出现故障后要手动更改代码吗?其实使用ADO.NET或者SQL
Native Client能够自动连接到故障转移后的伙伴,连接字符串如下所示:
ConnectionString="DataSource=
A;Failover Partner=B;Initial Catalog=AdventureWorks;Integrated Security=true;"
DataSource= A;
这样设置之后,客户端就可以自动切换数据库了
至此SQL Server 2008
的镜像高可用配置实例全部完成。