一、 镜像简介
自从SQL Server 2000以来,你已经能够通过使用复制来创建一个备用的服务器、传输日志,以及备份和重新存储了——但是现在又引入了一个内建的工具,它可以实现自动的错误恢复。数据库镜像是SQL Server 2005的一个新特性,它允许你将一个SQL Server中的数据库内容镜像到另一个SQL Server上。它还让你可以在发生错误的时候,通过镜像数据库来进行错误恢复。
数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像的拷贝是一个备用的拷贝,不能直接访问;它只用在错误恢复的情况下。
二、镜像工作方式
要进行数据库镜像所需的最小需求包括了两个不同的SQL Server运行环境。主服务器被称为“基本的”,第二个服务器被称作“镜像的”。基本数据库就是你实际用着的数据库,镜像数据库就是你的数据库的备用拷贝。当事务写入你的基本服务器的时候,他们也同样被传送到并写入你的镜像数据库中。除了基本和镜像之外,你还可以引入另一个可选的组件,名为“证人”。证人数据库是第三个SQL Server 2005运行实例,它是在判断什么时候进行错误恢复的时候,用于基本和镜像之间内部交流。只有当你想实现自动错误恢复的时候用到这个选项。它实现了2比1投票的能力,当我的一个组件不可达,并因此需要进行错误恢复的时候。证人服务器只有在你想实现自动错误恢复的时候才需要用到。
数据库镜像提供了三种实现的方式。根据你想要用什么方式来进行错误恢复处理来进行选择。
高可用性:这个操作模式选项允许你在两台服务器上同步事务写入,并支持自动错误恢复。要使用这个选项,你必须还要使用一个证人服务器。
高保护:这个选项可以让你在两台服务器上同步事物写入,但是错误恢复是手工的。因为自动的错误恢复不是这个选项的一部分,所以也不会用到证人服务器。
高性能:这个选项不关心两台服务器上的写入是否是同步的,因此在性能上有所提高。当使用这个选项的时候,你只能假设镜像服务器上的所有事情都是成功完成。这个选项只允许手工的错误恢复,因此不会用到证人服务器。
时刻记住将你的数据自动恢复到第二个拷贝才是数据库镜像的真正好处。因此,大多数的实现可能都是使用的高可达性方式。其他的选项仍然提供了内建的错误恢复过程,但是前提是你在发生错误的时候对进行自动的错误恢复怀有极大的兴趣。
三、实施镜像要点
1、 主休数据库必须是完全还原模型。
2、 镜像库初始过程,必须由主体备份进行还原,并使用NORECOVERY选项.
3、 镜像数据库与主体数据库必须同名。
4、 镜像库在会话过程中不可直接用,需通过创建镜像数据库快照访问镜像数据库。
5、 SQL2005SP1已前不提供对镜像支持,如测试需要使用-t1440跟踪标志启动服务。
6、 数据库镜像中的实例之间必须可信,端点需配置WINDOWS身份验证(同在信任域)或基于证书的身份验证(跨非信任域)。
四、镜像测试准备
(一) 安装三个实例至同一服务器,分别为:
MAIL\SQLSERVER(默认实例) 作为主体服务器
MAIL\SQLserverjx 作为镜像服务器
MAIL\SQLserverjz 作为见证服务器
(二) 准备数据库:
1 在主体服务上创建测试数据库 RBACKUP
并创建一个完全备份
2 在镜像服务上使用NORECOVERY选项恢复数据库,恢复后数据库状态为'正在还原'
五、镜像端点配置
1 在主体数据库(SQLSERVER(默认实例))上创建端点,用于伙伴连接通讯.
CREATE ENDPOINT DbMirroring --创建镜像端点
STATE=STARTED --开启
AS TCP(LISTENER_PORT=5022) --指定端口,可自定。
FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED)
--指定角色
Go --提交
2 在镜像数据库(SQLserverjx实例)上创建端点,用于伙伴连接通讯。
CREATE ENDPOINT DbMirroring --创建镜像端点
STATE=STARTED --开启
AS TCP(LISTENER_PORT=5033) --指定端口,可自定。因tcp5022被定,现设为5033
FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED)
--指定角色
Go --提交
3 在见证服务器(sqlserverjz实例)上创建端点,用于见证伙伴连接通讯
CREATE ENDPOINT DbMirroring --创建镜像端点
STATE=STARTED --开启
AS TCP(LISTENER_PORT=5055) --指定端口,可自定。现设为5055
FOR DATABASE_MIRRORING(ROLE=WITNESS,ENCRYPTION=SUPPORTED)
--指定角色
Go --提交
4 检查端点配置,分别在不同实例库上运行以下查询
SELECT * FROM sys.database_mirroring_endpoints
六、 配置镜像安全性。
1 主体数据库(SQLSERVER(默认实例))
use master --进master库
go --提交
GRANT CONNECT ON ENDPOINT::"DbMirroring" TO "535cool\administrator"
--设535cool\administrator账号之DbMirroring的Connect权限
go --提交
2 镜像数据库(SQLserverjx实例)
use master --进master库
go --提交
GRANT CONNECT ON ENDPOINT::"DbMirroring" TO "535cool\administrator"
--设535cool\administrator账号之DbMirroring的Connect权限
go --提交
3 见证服务器(sqlserverjz实例)
use master --进master库
go --提交
GRANT CONNECT ON ENDPOINT::"DbMirroring" TO "535cool\administrator"
--设535cool\administrator账号之DbMirroring的Connect权限
go --提交
七、 启动镜像。
1数据库镜像启动顺序
指定镜像数据库伙伴。
指定主体数据库伙伴。
指定见证数据库。
2 在镜像数据库(SQLserverjx实例)上,指定连至主体服务器(SQLSERVER(默认实例))的伙伴端点
ALTER DATABASE Rbackup --改变rbackup库
SET PARTNER=N'TCP://mail:5022' --设连伙伴的主机名及tcp端口(连主体库)
Go --提交
2 在主数据库(SQLSERVER(默认实例))上,指定连镜像服务器(SQLserverjx实例)的伙伴端点
ALTER DATABASE Rbackup --改变rbackup库
SET PARTNER=N'TCP://mail:5033' --设连伙伴的主机名及tcp端品(连镜像库)
Go --提交
注: 以上配置已完成高保护级别性模式,手动故障转移。
3 如要创建高可用性模式:在主数据库上(SQLSERVER(默认实例)),指定见证服务器端点
ALTER DATABASE Rbackup --改变rbackup库
SET WITNESS=N'TCP://mail:5055' --设连伙伴的主机名及tcp端品(连见证库)
Go --提交
4 高可用性模式下还需在主体库(SQLSERVER(默认实例))配置数据库镜像事务安全级别
ALTER DATABASE Rbackup SET SAFETY FULL --改库rbackup库安全为FULL
Go --提交
八、查看镜像状态
1通过Management Studio 对象资源管理器及数据库属性查看状态
(对象资源管理器)
九、 服务器角色切换
1角色切换准备知识
自动故障转移只针对高可用性模式 SAFETY=FULL
手动故障转移针对高可用性和高级保护性模式 SAFETY=FULL
强制服务只针对高性能模式 SAFETY=OFF
2自动故障转移
a当主体对镜像和见证服务器都不可连时发生故障转移,镜像转换为新主体数据库, (SQLserverjx实例)状态为: 主体,已断开连接。如主体恢复后协商成为新的镜像数据库, (SQLSERVER(默认实例))状态为:镜像,已同步/正在还原,原来镜像服务器(SQLserverjx实例)变为主体服务器状态:主体,已同步。---哈哈,不好理解吧!见图:
3 手动故障转移
在主体服务器上执行如下SQL语句
USE MASTER
ALTER DATABASE rbackup SET PARTNER FAILOVER
Go
执行完后主体服务器状态变: 镜像,已同步/正在还原,镜像服务器状态变:主体,已同步。如图:
详细原理图:
4强制转换服务,有可能造成数据丢失
a在镜像服务器上,取消对见证服务器的配置
alter database rbackup set witness off
b在镜像服务器上,配置事务安全性为OFF
alter database rbackup set safety off
注: 如果环境中配置为高保护、高性能模式(手动故障转移或强制转移),就不用取消见证服务器和事务安全性为OFF设置.
C断开主体服务器(如主体服务器down机),在镜像服务器上进行强制服务角色切换
alter database rbackup set partner force_service_allow_data_loss
完成后数据库状态为:主体,已断开连接 如图:
十、查询镜像服务器上的数据
1 在镜像服务器上,创建数据库快照
create database rbackup_temp_01
on (name=rbackup,filename='E:\Program Filesjx\rbackup_temp\rbackup_03_19.ss')
as snapshot of rbackup
2 访问镜像快照据库
use rbackup_temp_01
select * from table_1
3删除不要用的快照据库
Use master
Go
Drop database rbackup_temp_01
go
注:镜像快照据库不会随主休库的更新而更新。
十一、客户端重定向设置
1、使用ado.net或者SQL Native Client能够自动连接到故障转移后的伙伴.
2、连接字符串指定故障转移伙伴
ConnectionString=”Data Source=A;Failover Partner=b;
Initial Catalog=AdventureWorks;Integrated Security=True;”
十二、说明及参考
1测试环境为SQL2005 SP1测试版,并配置了三个实例。
2相关截图来自互联网、Microsoft msdn、Microsoft technet, Microsoft保有最终解释权。
3引用或者转载请保持原文完成,有什么好见意请sysname联系。
4 SQL Server 2005 联机丛书 数据库镜像概述,如下链接: