提示:
镜像服务器实例必须与主体服务器实例运行相同版本的 SQL Server,例如,都是企业版。SQL Server 2008 或更高版本对见证服务器没有版本要求。 11.3.2 数据更新的原理
对数据库执行的每项插入、更新和删除操作都会生成事务日志记录。主体服务器将这些活动的事务日志记录打包成数据流发送到镜像服务器。镜像服务器将尽快对主体数据库的日志记录按顺序“重做”(Redo)到镜像数据库中,从而实现了数据同。
与逻辑级别执行的复制不同,数据库镜像在物理日志记录级别执行。
为减少数据流,从 SQL Server 2008 开始,在事务日志记录的流发送到镜像服务器之前,主体服务器会先将其压缩。在所有镜像会话中都会进行这种日志压缩。
SQL Server 有一个专门的线程负责为镜像会话伙伴传送日志,还有一个线程负责镜像数据库事务日志文件的持久化。 11.3.3 运行模式
数据库镜像会话以同步操作或异步操作运行。
在同步操作下,事务将在伙伴双方处提交。由于主体数据库需要等待镜像数据库将日志写入磁盘后返回的确认消息,因此会延长事务滞后时间。在异步操作下,事务不需要等待镜像服务器将日志写入磁盘便可提交,这样可最大程度地提高性能。
根据是否同步操作以及是否支持自动故障转移功能,数据库镜像有以下三种运行模式。
◆ 高安全性模式
高安全性模式支持同步操作。当会话开始时,镜像服务器将使镜像数据库尽快与主体数据库同步。一旦同步了数据库,事务将在伙伴双方处提交,这会延长事务滞后时间。
◆ 高性能模式
高性能模式即异步运行。镜像服务器尝试与主体服务器发送的日志记录保持同步。镜像数据库可能稍微滞后于主体数据库。
主体服务器向镜像服务器发送事务日志记录之后,不会等待镜像服务器的确认。这意味着事务不需要等待镜像服务器将日志写入磁盘便可提交。此异步操作允许主体服务器在事务滞后时间最小的条件下运行,但可能会丢失某些数据。
◆ 自动故障转移模式(高可用模式)
在高安全模式运行时,可以添加见证服务器,从而实现自动故障转移。 11.3.4 数据库镜像的优势
数据库镜像技术有以下优势:
(1)消除存储方面的单一故障点
数据库镜像实现了一个数据库的两个副本,而且不像 AlwaysOn 故障转移群集实例那样依赖于共享存储。
(2)提高数据库可用性
发生灾难时,在具有自动故障转移功能的高安全性模式下,自动故障转移可快速使数据库的备用副本联机。在这种模式下,备用副本是“热备用”,不仅故障转移的速度非常快,而且不会丢失数据。
在其他运行模式下,数据库管理员可以选择强制服务(可能丢失部分数据),以替代数据库的备用副本。
(3)增强的数据保护
当数据库镜像运行在“高安全性”模式时,可以提供完整的数据冗余。
在其他运行模式下,数据库镜像也可以提供数据冗余,但可能丢失部分数据。但是,数据库之间的时间间隔通常很小;如果其中一个伙伴的系统负荷过高,则时间间隔会增大。
(4)自动页修复
在某些类型的错误导致页损坏,使其无法读取后,在 SQL Server 2008 企业版或更高版本上运行的数据库镜像伙伴(主体或镜像)将尝试自动修复该页。无法读取该页的伙伴将从其伙伴请求该页的新副本。如果此请求成功,则将以可读副本替换不可读的页,并且这通常会解决该错误。 11.3.5 数据库镜像的不足
镜像数据库技术有以下不足之处:
(1)版本限制
对于标准版的 SQL Server 实例,只可以使用“高安全模式”,即主体数据库与镜像数据库必须实现同步操作。在这种运行模式时,如果任何一个伙伴遇到性能问题,都将使同步操作带来较大的延时。
(2)镜像数据库的访问限制
镜像数据库甚至不可以提供只读访问,只有通过创建快照才能访问,因此镜像数据库的利用率不高。
由于数据库镜像技术存在上述不足,SQL Server 后续产品可能删除此项功能,建议改用 AlwaysOn 可用性组。
实验二:SQL server 2005高可用性之----数据库镜像
From: http://blog.csdn.net/leshami/article/details/4769060
SQL server 2005高可用性之数据库镜像,是SQL server 2005的新技术之一,是一种基于软件的高可用性解决方案,可以对不同服务器或同一服务器不同实例之间的数据库实验无数据延迟,自动故障转移的热备份。数据库镜像是基于数据库级别的,只适用于使用完整恢复模式的数据库。
一、实验目的:掌握SQL server 2005数据库镜像原理并配置数据库镜像、监控镜像状态及实现故障转移。
二、数据库镜像的组成
数据库镜像由二个数据库必须的数据库角色组成,一个是主体服务器角色,一个是镜像服务器角色。还有一个可选的服务器角色为见证服务器角色。
1. 主体服务器(Principal Role)之主体数据库,主体数据库提供客户端应用程序的连接,查询,更新,执行相关事务等,主体数据库要求使用完全恢复模式。
2. 镜像服务器(Mirror Role)之镜像数据库,镜像数据库持续同步来自主体数据库的事务,使得镜像数据库的数据与主体数据库保持一致。镜像数据库不允许任何的连接存在,但可以对其创建数据库快照来作为只读数据库,实现用户的相关查询操作。
3. 见证服务器(Witness Server),可选的配置,用于高可用性操作模式,通过见证服务器自动侦测故障,实现角色切换和故障转移。一个见证服务器可以为多组镜像提供服务。
4. 角色的转换。主体数据库与镜像数据库互为伙伴,当见证服务器侦测到主体服务器故障时,在高可用性模式下,实现故障自动转移后,会自动将主体服务器切换为镜像服务器角色,即角色发生了互换。
三、数据库镜像的工作过程
1. 主体数据库提供服务,当有来自客户端对主体数据库的更新时,主体数据库将数据写入主体数据库的同时也将事务传送给镜像数据库。
2. 镜像数据库Redo来自主体数据库的事务,Redo完毕后,并发送消息通知主体服务器。
3. 主体服务器收到来自镜像服务器中镜像数据写入完毕的消息后,将完成结果反馈给客户端。
四、端点的作用
SQL server 2005提供了多层次多级别的安全模式,连接端点便是安全中第一个层次级别,为实例级别,它控制着能否连接到实例。数据库镜像是三个实例级别的会话,故必须通过创建端点来实现互相通信。
SQL server 2005可以创建两种类型的端点,一个是HTTP端点,一个是TCP端点。我们可以创建TSQL, SERVICE_BROKER, 或 DATABASE_MIRRORING类型的TCP端点。
端点上安全分为三个层次,一是需要创建所需类型的端点,但该端点并不能提供服务。二是在创建的端点上指定端口号,并指定IP地址,数据库缺省的端口号为5022。三是对已创建并指定IP及端口号采用基于Windows身份认证或数字证书的加密功能加强安全。四是端点的状态必须为启动状态,才能够提供服务,如果端点在停止状态,对任意的连接,将给出错误提示。五是对于已建立的会话必须拥有端点的connect连接权限。
五、数据库镜像的操作模式
数据库镜像可以使用三种不同的操作模式,高可用性、高级别保护、高性能模式。在镜像会话期间,故障发生时,不同的操作模式对应着不同的事务转换方式。
1. 高可用性:在镜像正常会话期间,主体服务器和镜像服务器之间能够持续,同步的传送事物。主体服务器中主体数据库发送日志后等待镜像服务器中的镜像数据库确认,确认完毕后再反馈给应用程序。高可用性模式需要使用见证服务器,参与会话的主体和镜像实例之间不停的发送ping命令来侦测对方的状态,见证服务器则侦测主体和镜像两者的状态。一旦侦测到故障发生,则主体或镜像提交请求到见证服务器,由见证服务器来仲裁角色的转换。高可用性的使用场景为要求提供高服务质量、能够自动实现故障转移、保证数据完整的场合。
2. 高级别保护: 此模式没有见证服务器,主体服务器和镜像服务器之间同样能够持续,同步的传送事物。但由于少了见证服务器进行仲裁,则主体和镜像数据库之间不能够实现故障的自动转移,需要手动来实现角色之间的切换。高级别保护模式的使用场景多为高数据完整性要求、无须实现故障自动转移、对服务可用性要求相对较低的场合。
3. 高性能: 此模式没有见证服务器,主体服务器和镜像服务器之间采用异步传送模式。主体服务器上的事务直接提交后通知应用程序,无须等待镜像服务器的确认,所主体数据库和镜像数据库之间有延迟的现象存在。没有了见证服务器进行仲裁,主体和镜像数据库之间不能够实现故障的自动转移,需要手动来实现角色之间的切换。高性能模式多使用于对性能要求高、主体镜像服务器相对较远、允许有延迟现象的场合。
4. 事务安全性的说明:数据库镜像会话中数据库的安全性可以设定为Full或Off。Full模式的特性为主体和镜像数据库实现同步传输,主体发送日志后需要等待镜像数据库的确认,主体数据库和镜像数据库的日志完全一致。Off模式则表现为主体和镜像使用的异步传输模式,主体发送日志后无须等待镜像数据库的确认,主体数据库失败时,镜像服务器上可能会丢失部分日志,使得两者不能实时同步。
5. 仲裁: 仲裁用于设定了见证服务器的镜像会话,用于高可用性模式。仲裁要求必须有两个或两个以上的服务器实例,且任一时间内必须要有一个伙伴为数据库提供服务,当故障发生时,仲裁决定故障的转移。
6. 几种数据库镜像模式的比较,如下:
操作模式传输机制事务安全见证服务器是否要仲裁故障转移类型高可用性同步FullYY自动或手动高级别保护同步FullNY仅手动高性能异步OffN/AN仅强制 六、数据库镜像所需的环境
1. 支持数据库镜像所需的版本,确保主体服务器和镜像服务器使用相同的版本,如两个伙伴运行SQL server 2005标准版或SQL server 2005运行企业版,安装sp2以上补丁,否则需要使用跟踪标记1400来实现。
2. 一个主体服务器,一个镜像服务器,一个可选的见证服务器,见证服务器可以使用任意版本的SQL server 2005。
3. 主体服务器的主体数据库设置为 FULL恢复模式。
七、本次实验的环境
1. windows xp pro (英文版) + sp2
2. SQL server 2005 Developer + sp3
3. 同一主机的三个实例: ROBINSON , ROBINSON/MIRROR,ROBINSON/WITNESS
4. 用于实现镜像的数据库为Performance,此Performance数据库为SQL server 2005技术内幕:T-SQL查询中的脚本生成,现转其脚本如下,此数据生成后大小为1GB左右,主要是日志文件较大,可以修改@max和@numorders的值来缩小数据库,也可以停止MSSQLSERVER服务后删除日志文件,使用sp_attach_single_file_db来重新生成较小日志文件。
SET NOCOUNT ON; USE master;
GO
IF DB_ID('Performance') IS NULL
CREATE DATABASE Performance;
GO
USE Performance;
GO
-- Creating and Populating the Nums Auxiliary Table
IF OBJECT_ID('dbo.Nums') IS NOT NULL
DROP TABLE dbo.Nums;
GO
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 1000000;
SET @rc = 1;
INSERT INTO Nums VALUES(1);
WHILE @rc * 2 ON dbo.Orders(orderdate, orderid)
INCLUDE(custid, empid);
八、实验步骤
1. 检查Performance数据库的还原类型是否为FULL,否则请修改Performance的恢复模式为FULL。
2. 从主服务器备份主数据库后恢复到镜像服务器中,并确保两者数据库处于一致状态,在恢复时指定norecovery选项,此处也可以使用日志传送来初始化数据库镜像,恢复其他的如增量备份和日志备份文件,同样需使用norecovery选项。
3. 复制其他需要的对象到镜像服务器,如logins,SSIS,Jobs等。
4. 创建端点。端点的创建需要在每个实例上创建,且必须是sysadmin角色的成员,创建时需指定端点角色,并对端点激活。
--ROBINSON :
CREATE ENDPOINT [DB_mirroring]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE,
ENCRYPTION = SUPPORTED ALGORITHM RC4);
--ROBINSON/MIRROR:
CREATE ENDPOINT [DB_mirroring]
STATE=STARTED
AS TCP (LISTENER_PORT = 5023, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE,
ENCRYPTION = SUPPORTED ALGORITHM RC4);
--ROBINSON/WITNESS:
CREATE ENDPOINT [DB_mirroring]
AS TCP (LISTENER_PORT = 5024, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = WITNESS, AUTHENTICATION = WINDOWS NEGOTIATE,
ENCRYPTION = SUPPORTED ALGORITHM RC4);
> 5. 分别在各个实例上查看端点的配置情况及端点的状态。
SELECT * FROM SYS.DTABASE_MIRRORING_ENDPOINTS;
GO
6. 分别在各个实例上配置数据库镜像的安全性,本实验使用的同一帐户,故配置数据库镜像的安全性语句相同,如下。如要设定不同的帐户,请在各实例上增加Login帐户,映射到Windows。
USE MASTER
GO
GRANT CONNECT ON ENDPOINT::”db_mirroring” TO ”robinson/SQL_mirror”;
GO
7. 单击各个实例的Security,Logins下的SQL_mirror帐户,查看其Properities,在Securables可以看到SQL_mirror被授予了connect权限。
8. 启动数据库镜像
在镜像服务器上执行以下语句,用已指明主服务器的伙伴。注意应先在镜像服务器上指明主服务器伙伴,然后才在主服务器上指明镜像伙伴。