SQL SERVER镜像技术白皮书_第1页
SQL SERVER镜像技术白皮书_第2页
SQL SERVER镜像技术白皮书_第3页
SQL SERVER镜像技术白皮书_第4页
SQL SERVER镜像技术白皮书_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SQL SERVER 2005数据库镜像 Ron Talmage, Solid Quality Learning发表日期:April 2005适用于:SQL SERVER2005版权该白皮书为初步文档,可能会在所述软件进行最后商业发布之前做完全修改。该文档所含信息代表微软公司在文档出版时对所论及问题的当前看法。由于微软必须对千变万化的市场情况做出相应反响,因此本文档不应视为微软的任何承诺,且微软不保证所陈述任何信息在产品发布后的准确性。本白皮书仅供信息参考。微软对本文档中的信息不做任何明示或默示保证。遵守所有适用的版权法律是用户应尽的责任。下述陈述不限制任何版权,在未获得微软公司明示书面许可的

2、情况下,不得以任何目的复制本文档任何局部或将任何局部保存或引入检索系统、亦不得以任何形式电子、机械、影印、录制或其他方式进行传播。微软在文件所述主题中拥有专利权、专利应用程序、商标、版权或其他知识产权。除非在微软的任何书面许可协议中明示规定,否那么对本文档的提供不得视为对任何专利权、商标、版权或其他知识产权许可的提供。除非特别声明,本文中描述的例如公司、组织、产品、域名、e-mail地址、徽标、人物、地点以及事件均为虚构的,不应与任何实际的公司、组织、产品、域名、e-mail地址、徽标、人物、地点以及事件有任何的联系。 2005微软公司版权所有。Microsoft和ActiveX是微软公司在美

3、国和其他国家的注册商标或商标。内容列表 HYPERLINK l 概述 TOC o 1-7 h z u HYPERLINK l _Toc127698914 概述 PAGEREF _Toc127698914 h 1 HYPERLINK l _Toc127698915 数据库镜像介绍 PAGEREF _Toc127698915 h 1 HYPERLINK l _Toc127698916 数据库镜像动态 PAGEREF _Toc127698916 h 5 HYPERLINK l _Toc127698917 数据库镜像可用性场景 PAGEREF _Toc127698917 h 15 HYPERLINK

4、l _Toc127698918 实现数据库镜像 PAGEREF _Toc127698918 h 32 HYPERLINK l _Toc127698919 数据库镜像和高可用性技术 PAGEREF _Toc127698919 h 36 HYPERLINK l _Toc127698920 结论 PAGEREF _Toc127698920 h 39概述数据库镜像是SQL SERVER2005用于提高数据库可用性的新技术。数据库镜像将事务日志记录直接从一台效劳器传输到另一台效劳器,并且能够在出现故障时快速转移到备用效劳器。可以编写客户端程序自动重定向连接信息,这样一旦出现故障转移就可以自动连接到备用效

5、劳器和数据库。 自动进行故障转移并且使数据损失最小化通常包括昂贵的硬件和复杂的软件。但是,数据库镜像可以在不丧失已提交数据的前提下进行快速故障转移,无须专门的硬件,并且易于配置和管理。数据库镜像介绍在数据库镜像中,一台SQLServer2005实例连续不断的将数据库事务日志发送到另一台备用SQL Server实例的数据库副本中。发送方的数据库和效劳器担当主角色,而接收方的数据库和效劳器担当镜像角色。主效劳器和镜像效劳器必须是独立的SQLServer2005实例。在所有SQLServer数据库中,在对真正的数据页面进行修改之前,数据改变首先都记录在事务日志中。事务日志记录先被放置在内存中的数据库

6、日志缓冲区中,然后尽快地输出到磁盘或者被硬化。在数据库镜像中,当主效劳器将主数据库的日志缓冲区写入磁盘时,也同时将这些日志记录块发送到镜像实例。 当镜像效劳器接收到日志记录块后,首先将日志记录放入镜像数据库的日志缓冲区,然后尽快地将它们硬化到磁盘。稍后镜像效劳器会重新执行那些日志记录。由于镜像数据库重新应用了主数据库的事务日志记录,因此复制了发生在主数据库上的数据改变。 主效劳器和镜像效劳器将对方视为数据库镜像会话中的伙伴。数据库镜像会话包含了镜像伙伴效劳器之间的关系。一台给定的伙伴效劳器可以同时承当某个数据库的主角色和另一个数据库的镜像角色。 除了两台伙伴效劳器主效劳器和镜像效劳器,一个数据

7、库会话中可能还包含第三台可选效劳器,叫做见证效劳器。见证效劳器的角色就是启动自动故障转移。当数据库镜像用于高可用性时,如果主效劳器突然失败了,如果镜像效劳器通过见证效劳器确认了主效劳器的失败,那么它就自动承当主效劳器角色,并且在几秒钟之内就可以向用户提供数据库效劳。数据库镜像中需要注意的一些重要事项:主数据库必须为FULL复原模型。由于bulk-logged操作而导致的日志记录无法发送到镜像数据库。初始化镜像数据库必须首先使用NORECOVERY复原主数据库,然后再按顺序复原著数据库事务日志备份。镜像数据库和主数据库名称必须一致。由于镜像数据库处于recovering状态,因此不能直接访问。通

8、过在镜像数据库上创立数据库快照可以间接读取某一个时刻点的镜像数据库。参阅该白皮书后面“数据库镜像和数据库快照局部 注意: 要想获取更多与数据库镜像术语有关的信息,请参阅SQLServer2005 Books Online中关于“Overview of Database Mirroring。 操作模式数据库镜像会话有三种可能的操作模式。根据事务平安性的设置以及镜像会话中是否需要见证效劳器来决定精确的操作模式。 表1.数据库镜像操作模式操作模式事务平安性传输机制需要Quorum见证效劳器故障转移类型高可用FULL同步YY自动或者手动高保护FULL同步YN只能手动高性能OFF异步NN/A只能forc

9、ed 如果safety设置为FULL,那么通过同步方式传输数据,并且需要一台镜像效劳器才能提供数据库效劳。quorum投票表决要求至少两台效劳器的参与才能够决定两个伙伴效劳器各自承当什么角色,主角色还是镜像角色。 为了更深入研究这三种操作模式,首先来更进一步研究一下事务平安性和quorum的角色。事务平安性If 事务平安性或者safety设置为FULL,那么主效劳器和镜像效劳器工作在同步传输模式下。当主效劳器硬化其主数据库日志记录到磁盘时,也同时将日志发送到镜像效劳器。然后主效劳器等待镜像效劳器的答复。镜像效劳器将那些相同的日志记录硬化到镜像日志所在磁盘后,对主效劳器进行答复。当safety设

10、置为OFF时,主效劳器不会等待来自效劳器确实认,因此主数据库和镜像数据库可能不是完全同步的也就是,镜像可能滞后于主数据库。同步传输方式保证镜像数据库事务日志中所有事务与主数据库事务日志中的事务同步,因此可视为事务是平安传输的。要将safety设置为FULL,使用 ALTER DATABASE SET SAFETY FULL; 当safety设置为OFF,主效劳器和镜像效劳器之间的通信是异步的。主效劳器不会等待镜像效劳器已将事务记录硬化确实认信息。镜像效劳器通过尽快记录事务日志的来试图保持与主效劳器同步,但是如果主效劳器突然失败同时强制镜像效劳器提供效劳,那么某些事务还是有可能丧失参阅SQLSe

11、rver Books中的Forced Service。Quorum和见证效劳器当safety设置为FULL,数据库镜像需要quorum才能提供数据库效劳。quorum是在同步数据库镜像会话中要求的所有连接起来的效劳器之间的最小关系。由于一个quorum至少需要两台效劳器,因此当safety为FULL时,主效劳器必须和其他某至少一台效劳器组成quorum才能够提供数据库效劳。见证效劳器帮助主效劳器或者镜像效劳器组成quorum。如果存在见证效劳器,那么主数据库或者镜像数据库失败时,其余两台效劳器还可以组成quorum。如果主效劳器无法看到镜像效劳器,那么它可以和见证效劳器组成quorum,并保持

12、提供数据库效劳。类似地,如果镜像效劳器和见证效劳器看不到主效劳器,那么这两台效劳器可以组成quorum,镜像效劳器担当新主效劳器的角色。 见证效劳器失败不被视为数据库镜像绘画中的单点失败。因为如果见证效劳器失败了,那么主效劳器和镜像效劳器还可以组成quorum更多信息请参阅SQLServer Books Online中的“Quorum in Database Mirroring Sessions主题。高可用操作模式高可用操作模式支持最大程度的数据库可用性,如果主数据库失败将自动转移到经销数据库。它要求将safety设置为FULL并且定义一台见证效劳器作为数据库镜像会话中的一员。 高可用操作模式

13、最适合于那些效劳器之间具有高速且可靠的通信线路,同时要求在单一数据库上实现自动故障转移的场景。当safety为FULL时,主效劳器必须短暂等待来自镜像效劳器的答复,主效劳器性能也因此受到镜像效劳器能力的影响。由于单数据库失败将导致自动故障转移,因此如果有多数据库应用程序,那么就应该考虑其他操作模式参阅该白皮书中实现数据库镜像局部介绍的“多数据库问题高可用模式中数据库镜像是自监视的。如果主数据库突然不可用,或者主效劳器停机,那么见证效劳器和镜像效劳器将组成quorum,然后镜像的SQLServer将进行自动故障转移。此时,竞相效劳器实例将其角色转换为新主效劳器并恢复数据库。由于镜像数据库已经重新

14、执行了主数据库的事务日志并且其事务日志也与主数据库同步,因此镜像效劳器可以快速提供数据库效劳。此外,SQLServer2005可以在数据库恢复前就向用户提供数据库效劳。SQLServer数据库恢复包括三个阶段:分析阶段、redo阶段、以及最后的undo阶段。在SQLServer2005中,只要redo阶段完成,新恢复的数据库就可以让用户访问。因此如果数据库镜像故障转移发生,新恢复的主数据库只要完成了redo阶段就可以向用户提供效劳了。因为镜像数据库自始至终都在重新执行事务日志记录,因此所有镜像效劳器只须完成redo过程就可以了,通常几秒钟就可以完成。 高保护操作模式高保护操作模式中事务平安性设

15、置为FULL,但是镜像会话中没有见证效劳器。主效劳器必须组成quorum,可是没有见证效劳器,因此只能和镜像效劳器配合在一起。这种模式下由于没有见证效劳器来担当平局决胜的角色,因此只能手动完成故障转移。行自动故障转移是不可能的,因为如果主效劳器失败,镜像效劳器没有见证效劳器来组成quorum。safety设置为FULL,如果主效劳器突然间失去了和镜像效劳器的quorum,那么镜像效劳器必须使其数据库停止效劳。不推荐使用高保护模式的数据库镜像配置,除非在高可用模式下必须临时移除见证效劳器时,可以使用该模式作为一种临时过渡。高性能操作模式在高性能操作模式下,事务平安性设置为OFF,以异步方式传输日

16、志记录。主效劳器无须等待镜像效劳器所有日志记录已被硬化确实认信息。镜像效劳器尽自己最大可能保持与主效劳器数据的一致,但不能保证在任何时刻来自主数据库的所有最新事务日志记录都能够被硬化到镜像数据库的事务日志中。 在高性能模式下,见证效劳器不承当任何角色,也不需要quorum。因此高性能模式无法启用自动和手动的故障转移。唯一允许的故障转移方式就是forced service ,它同样也是一种手工操作:ALTER DATABASE SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSSforced service故障转移导致立刻恢复镜像数据库。如果某些主数据库的事务日志记

17、录还没有被镜像效劳器接收,那么恢复镜像数据库将导致潜在的数据丧失。高性能模式特别适合于远距离的数据传输换句话说,用于远程站点的灾难恢复,或者对那些活动频繁且可以容忍某种程度数据丧失的数据库进行镜像。 数据库快照和数据库镜像由于镜像数据库处于recovering状态,因此不可访问也不可读。在SQLServer2005企业版和开发人员版中可以创立数据库快照来读取某个时点的镜像数据库。数据库快照提供了一个只读的数据库视图,开放数据给用户访问。这些数据与创立快照时刻的数据库数据相一致。 对数据库快照的访问如同访问一个其他的数据库。查询数据库快照时,从数据库快照文件中读出那些自快照创立后被修改的数据,从

18、原始数据库中读出未修改的数据。最终效果就是读取了在创立快照时刻数据库当时的数据。更多信息请参阅SQLServer Books Online中Using Database Snapshots with Database Mirroring主题。由于数据库快照确实增加了镜像效劳器的负担,因此需要留神它们对数据库镜像性能可能造成的影响。由于只能镜像到一个数据库,因此如果需要将数据扩充到多个只读的报表效劳器上,那么事务复制是更好的选择。更新信息请阅读后面实现数据库镜像局部的“数据库镜像和复制客户端重定向在SQLServer2005中,如果使用或者SQL Native Client连接配置了镜像的数据库

19、,那么应用程序就可以利用驱动程序的能力在发生数据库镜像故障转移时自动重定向数据库连接。必须在连接字符串中指定原始主效劳器和数据库名称,以及可选的故障转移伙伴效劳器名称。 连接字符串的写法有许多种,以下只给出一个例子,指定server A作为主效劳器,server B作为镜像效劳器,AdventureWorks作为数据库名称:Data Source=A;Failover Partner=B;Initial Catalog=AdventureWorks;Integrated Security=True;如果连接到原始主效劳器失败,那么就使用连接字符串中的failover partner作为备用效劳

20、器名称。如果连接到原始主效劳器成功,那么就不使用连接字符串中的failover partner名称,但是会从主效劳器上查询其故障转移伙伴的名称并将结果存放在客户端缓存中。假设客户端成功连接到主效劳器,然后一个数据库镜像故障转移发生自动地、手动的、forced。当下一次应用程序尝试使用连接时,或者SQL Native Client驱动程序将会检测到与旧主效劳器的连接已经失败,然后自动重新连接由failover partner名称指定的新主效劳器。如果连接成功并且新的镜像效劳器存在,那么驱动程序从新主效劳器处获取新的故障转移伙伴名称并将其存放在客户端缓存中。如果无法连接到备用效劳器,那么驱动程序将

21、交替尝试与每个效劳器的连接直道连接超时。使用内置在和SQL Native Client驱动程序中的数据库镜像支持的最大优点就是无须重新编写应用程序,或者在应用程序中编写特殊代码来处理数据库镜像的故障转移。 如果不使用或者SQL Native Client自动进行重定向,那么也可以使用其他技术使应用程序进行故障转移。例如,如果客户端连接到一台虚拟效劳器,可以使用Network Load Balancing手动重定向一台效劳器到另一台效劳器的连接。还可以编程实现自己的重定向代码和连接重试逻辑。但是,所有这些用于协调客户端重定向和数据库镜像的技术都有一些重要限制。数据库镜像只能工作在数据库级别,而不

22、是效劳器级别。如果应用程序查询一台效劳器上的多个数据库,或者使用完全限定对象名称进行跨数据库查询,那么就需要多加小心了。如果多个数据库位于一台效劳器并且都配置了和备用效劳器的镜像,就有可能出现其中一个数据库故障转移到备用效劳器而其他数据库依然在原始效劳器的情况。如果是那样的话,可能就要求每个数据库查询都使用一个单独的连接,这样将无法进行跨数据库查询,因为在镜像效劳器上只有一个数据库是主数据库,其余都是镜像数据库。数据库镜像与SQL SERVER 2005版本下表显示各种版本的SQL SERVER2005支持的数据库镜像功能。表 2。数据库镜像和SQL SERVER 2005版本数据库镜像功能企

23、业版开发人员版标准版工作组版SQLExpress镜像伙伴见证效劳器Safety = FULLSafety = OFF故障转移后UNDO期间数据库可用性并行redo数据库快照少数几个数据库镜像功能要求使用SQL SERVER2005企业版或者开发人员版:高性能模式下safety设置为OFF 异步数据传输;数据库快照;使用多线程在镜像数据库上应用事务日志并行REDO。SQL Express和工作组版本可以作为数据库镜像的见证效劳器,但不能作为伙伴效劳器。数据库镜像动态要深入理解SQL SERVER2005 数据库镜像,了解数据库镜像会话如何变化将对您大有帮助。这一局部内容包括数据库镜像会话中不同的

24、数据库状态、同步和异步的日志记录传输机制、以及故障转移次序。 配置和平安性一旦确定了主效劳器、镜像效劳器、以及可选的见证效劳器,设置数据库镜像主要包括三个步骤。 必须备份数据库并使用norecovery在镜像数据库上复原该数据库。 注意:在备份数据库并复原到镜像数据库之前,主数据库必须设置为FULL复原模型。如果必须在事务日志中传输Bulk-logged记录,那么数据库镜像将无能为力。镜像效劳器必须有足够的磁盘空间以允许和主数据库同样的文件增长。如果希望在镜像效劳器中创立数据库快照,那么还必须为快照提供额外的磁盘空间。如果备份、拷贝、以及复原数据库消耗了相当长的时间,那么可能需要现在原始数据库

25、上进行一次事务日志备份来控制日志的大小。但是,如果通过日志到日志的备份清理了日志记录,数据库镜像将无法初始化。因此必须在初始化数据库镜像之前在镜像数据库上按顺序恢复那些事务日志记录备份。参与数据库镜像会话的效劳器必须彼此信任。对于本地通信而言,例如一个域内的通信,信任意味着SQLServer实例登陆账号必须有权限连接到其他镜像效劳器,也包括endpoints。首先在每个效劳器上使用CREATE LOGIN命令,然后使用GRANT CONNECT ON ENDPOINT命令参阅 in SQLServer Books Online中“Example of Setting Up Database M

26、irroring Using Windows Authentication 非信任域之间的通信必须使用证书。如果使用CREATE CERTIFICATE语句创立自签名的证书,根本上所有数据镜像证书的要求都可以满足。确认在CREATE CERTIFICATE语句中将证书标记为ACTIVE FOR BEGIN_DIALOG。下一步是创立数据库镜像的endpoints。创立endpoints要求您必须具有SQLServer instance的系统管理员权限。必须在每台效劳器上创立专门用于数据库镜像的endpoints. 创立endpoints最简单的方式就是使用Configure Database

27、Mirroring Security向导,可以在Database Properties对话框中Mirroring页面上单击Configure Security按钮启动该向导。Configure Security对话框会在构造和执行CREATE ENDPOINT命令之前,提示您输入正确的计算机名称和端口号,以及可选的登陆帐号。参阅SQLServer Books Online中 “How to: Create a Mirroring Endpoint (Transact-SQL) 如果在域中设置数据库镜像,并且所有的SQLServer实例使用相同的效劳帐号和密码,那么就不需要在每个效劳器上创立登陆

28、帐号。类似的,如果在工作组中,并且所有的SQLServer实例使用相同的效劳帐号和密码,也不需要在每个效劳器上创立登陆帐号。设置endpoints时将Configure Database Mirroring Security向导中的登陆帐号保存为空就可以了。每个数据库endpoint必须指定效劳器上一个唯一的端口号。如果使用不同效劳器上的SQLServer实例,那么这些端口号可以是相同的。Configure Database Mirroring Security向导会自动建议您使用5022作为端口号。如果任何SQLServer实例运行在同一台效劳器上,那么每个实例的端口号必须唯一,所有的镜像端

29、口号也必须唯一。 假设在高可用镜像会话中有三台效劳器。Server A是主效劳器,server B是镜像效劳器,server W作为见证效劳器。对于server A而言,下面的命令在5022端口创立endpoint:CREATE ENDPOINT Mirroring AS TCP (LISTENER_PORT = 5022)FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = ENABLED);注意:角色被指定为PARTNER,这样该效劳器可以担当数据库镜像的主效劳器或者镜像效劳器。在server B上执行相同的命令。因为server B是独

30、立物理效劳器上的SQLServer实例,因此可以使用相同的端口号。然后对于server W,使用 CREATE ENDPOINT Mirroring AS TCP (LISTENER_PORT = 5022)FOR DATABASE_MIRRORING (ROLE = WITNESS, ENCRYPTION = ENABLED);注意:对于server W,角色被指定为WITNESS。 默认不启动endpoint。接下来在每个效劳器上使用下面的命令来启动endpoint:ALTER ENDPOINT Mirroring STATE = STARTED;可以在CREATE ENDPOINT命令中

31、插入可选的STATE选项。在每台效劳器上反复执行该选项。使用CREATE ENDPOINT创立endpoint时,可以通过协议特定的参数根据IP地址来限制对endpoint的访问。结合RESTRICT_IP with ALL选项和EXCEPT_IP加上那些允许访问的特殊IP地址可以对一组IP地址作限制。参阅SQLServer Books Online中的See “CREATE ENDPOINT 。查询每个效劳器的目录视图来检查数据库镜像的endpoints:SELECT *FROM sys.database_mirroring_endpoints;4. 要启动数据库镜像,接下来指定指定伙伴效劳

32、器和见证效劳器。 必须具有数据库管理员权限才可以启动和管理一个给定的数据库镜像会话。在server A,即打算作主效劳器的机器上设置主数据库角色以及伙伴镜像效劳器:- Specify the partner from the principal serverALTER DATABASE AdventureWorks SET PARTNER =NTCP:/B.corp.mycompany :5022;镜像伙伴的名称必须为完全限定计算机名。决定机器的完全限定名称可能有些难,不过Configure Database Mirroring Security向导会在建立endpoint时自动找出它们。 从

33、命令行提示中运行下面的命令也可以找出一台机器的完全限定名称:IPCONFIG /ALL将Host Name和Primary DNS Suffix连接到一起。如果您看到的信息类似于:Host Name . . . . . . . . . . . . : A那么计算机名就是。加上TCP:/前缀然后再附加: ,就是镜像伙伴名称。在镜像效劳器上重复相同的命令,但是要指定主效劳器名称:- Specify the partner from the mirror serverALTER DATABASE AdventureWorks SET PARTNER =NTCP:/A.corp.mycompany :

34、5022;接下来在主效劳器上指定见证效劳器:- Specify the witness from the principal serverALTER DATABASE AdventureWorks SET WITNESS =NTCP:/W.corp.mycompany :5026;执行完CREATE ENDPOINT后见证效劳器上就不需要执行其他命令了。最后,在主效劳器上指定会话的safety级别:- Set the safety level from the principal serverALTER DATABASE AdventureWorks SET SAFETY FULL;此时,镜像

35、将自动启动,然后主效劳器和镜像效劳器将进行同步。可以调整判定镜像伙伴是否故障的超时值,使用ALTER DATABASE命令的TIMEOUT参数。例如将TIMEOUT值改为20秒默认是10,在主效劳器上执行:- Issue from the principal serverALTER DATABASE AdventureWorks SET PARTNER TIMEOUT 20;最后,在主效劳器上使用ALTER DATABASE和REDO_QUEUE选项可以镜像效劳器上redo队列的大小。下面的查询将镜像效劳器的redo队列设置为100兆:- Issue from the principal se

36、rverALTER DATABASE AdventureWorks SET PARTNER REDO_QUEUE 100MB;只要指定了镜像伙伴,镜像将立即启动。数据库镜像目录视图数据库镜像会话包括组成伙伴的效劳器,可能还有见证效劳器之间的关联。每台参与镜像的效劳器都保存关于镜像会话和当前数据库状态的元数据。可以在主效劳器和镜像效劳器上通过查询目录视图来检查会话状态。使用另一个视图可是返回见证效劳器的信息要想获得两个目录视图中所有列的更完整的描述,请参阅 SQLServer Books Online的“。了解数据库镜像会话如何工作以及数据库处于何种状态的一种不错的方法就是检查目录视图里的数据。

37、我们从高可用配置开始safety设置为FULL,有一台见证效劳器。下面的查询返回了主效劳器或者见证效劳器上数据库镜像会话的根本描述信息。SELECT DB_NAME(database_id) AS DatabaseName , mirroring_role_desc , mirroring_safety_level_desc , mirroring_state_desc , mirroring_safety_sequence , mirroring_role_sequence , mirroring_partner_instance , mirroring_witness_name , mir

38、roring_witness_state_desc , mirroring_failover_lsnWHERE mirroring_guid IS NOT NULL; 在见证效劳器上运行下面类似的查询,可以返回见证效劳器的相关描述信息。 SELECT Database_name , safety_level_desc , safety_sequence_number , role_sequence_number , is_suspended , is_suspended_sequence_number , principal_server_name , mirror_server_nameFR

39、OM sys.database_mirroring_witnesses;现在来比拟在一个典型的数据库镜像会话中两个查询的输出结果。假设已经设置了server A到 server B的数据库镜像,使用safety为FULL。设置以下配置的例如代码,请参阅后面的实现数据库镜像“配置和平安性见证效劳器是server W,对AdventureWorks数据库做镜像。表3显示了两个查询的输出结果:表3. 高可用镜像会话,两个伙伴效劳器输出结果。镜像伙伴的元数据列主效劳器值:Server A镜像效劳器值:Server Bdb_name(database_id)AdventureWorksAdventure

40、Works mirroring_role_descPRINCIPALMIRRORmirroring_safety_level_descFULLFULLmirroring_state_descSYNCHRONIZEDSYNCHRONIZEDmirroring_safety_sequence11mirroring_role_sequence11mirroring_partner_instanceTCP:/B.corp.mycompany :5022TCP:/A. .corp.mycompany :5022mirroring_witness_nameTCP:/W.corp.mycompany :50

41、22TCP:/W.corp.mycompany :5022mirroring_witness_state_descCONNECTEDCONNECTEDmirroring_failover_lsn9500000000730000195000000007300001注意数据库镜像会话中的每个伙伴保存的所有元数据从另一个伙伴的角度来看是完全相同的。每个伙伴保存其数据库名称、整个会话的safety设置、数据库的镜像状态、以及两个序列计数器。 mirroring_safety_sequence计数器保存在两个伙伴上,只要safety设置改变时将增加该计数器的值。mirroring_role_sequen

42、ce计数器保存在两个伙伴以及见证效劳器上,只要发生故障转移就增加该计数器的值。伙伴数据库的状态以及见证效劳器的状态都保存在每个伙伴效劳器上:mirroring_state_desc显示了会话中伙伴数据库的状态。mirroring_witness_state_desc显示了会话中见证效劳器的状态。最后,每个伙伴都包含一个mirroring_failover_lsn。LSN是一个日志序列号,用于唯一标识每条事务日志记录。 镜像伙伴将上次硬化的最后一组日志记录的最高LSN +1保存起来。在上表中,由于主数据库中只有为数不多的活动,因此 镜像转移故障的lsn和主效劳器以及见证效劳器的lsn相同。当传输

43、大量数据时,可能就会发现主效劳器的lsn值大于镜像效劳器的值,因为镜像效劳器的运行有些滞后。现在比拟一下在见证效劳器上找到的元数据。下表显示了来自见证效劳器元数据的一些可比拟信息:表 4. 见证效劳器上的输出,关联了伙伴的元数据。见证效劳器的元数据列见证效劳器值相应的镜像伙伴元数据列database_nameAdventureWorksdb_name(database_id)safety_level_descFULLmirroring_safety_level_descsafety_sequence_number1mirroring_safety_sequencerole_sequence_n

44、umber1mirroring_role_sequenceis_suspended0is_suspended_sequence_number1principal_server_nameTCP:/A. .corp.mycompany :5022mirror_server_nameTCP:/B.corp.mycompany :5022注意见证效劳器的元数据包含了safety的描述、safety的序列号、以及角色序列号。见证效劳器还保存了会话是否被挂起的信息,以及主效劳器和镜像效劳器的名称。注意见证效劳器的目录视图并没有报告镜像故障转移的lsn,而且也不保存数据库状态。数据库镜像所需的全部元数据特别

45、是故障转移lsn和伙伴效劳器名称都保存在镜像伙伴上。见证效劳器只保存在高可用模式下作为见证者必须保存的那些数据,特别是用于跟踪会话中角色转换数目的角色序列号。该计数器用于帮助判定何时一台主效劳器可以做角色转换。相关知识会在下一局部介绍的场景中进行阐述。数据库镜像状态和状态转换在数据库镜像会话过程中,每台伙伴效劳器都对数据库状态作记录和保存,可以通过目录视图来查看。mirroring_state列返回状态号,mirroring_state_desc列返回状态的描述性名称。要想获取关于数据库状态号和描述性名称的完整列表,请看SQLServer Books Online中的“。同样的目录视图还用于报

46、告见证效劳器的状态信息。 除了为每个数据库报告状态信息以外,还有三个重要术语用来对数据库镜像中的效劳器和数据库进行描述。主效劳器上的数据是exposed ,当它进行事务处理但是没有日志数据被发送到镜像效劳器。 不能提供数据库效劳 当主效劳器不允许任何用户连接到数据库,不允许任何事务处理。 效劳器被孤立 当它无法联系数据库镜像会话中任何其他效劳器,同时别人也联系不上它。当主数据库是exposed,它可以接收用户连接和进行事务处理,但是没有日志记录被发送到镜像数据库。因此如果主数据库失败了,那么镜像数据库不包含任何自主数据库进入exposed状态后主效劳器上发生的事务。同样的,也不可以清理主数据库

47、的事务日志,这导致日志文件的无限增长。当safety设置为FULL时,如果主效劳器无法和其他效劳器组成quorum,它将停止提供数据库效劳。主效劳器将不允许主数据库上的用户连接和事务,并断开所有当前的用户。只要主效劳器能再次组成quorum,就立刻重新提供数据库效劳。一台效劳器可能运转正常但是它和数据库镜下会话中的其他效劳器之间的通信连路中断了。如果那样的话,我们称效劳器被孤立了。 当safety为FULL时,如果主效劳器被孤立,那么它将无法提供数据库效劳,因为会话中没有其他效劳器可与之共同组成quorum。现在来关注一下数据库镜像状态,从主效劳器和数据库开始。主效劳器数据库状态当safety

48、设置为FULL,主数据库的正常操作状态时SYNCHRONIZED状态。当safety设置为OFF,主数据库的正常操作状态是SYNCHRONZING状态。 如果safety设置为FULL,主数据库的起始状态始终是SYNCHRONIZING,当主数据库和镜像数据库事务日志同步后,数据库状态就转换成SYNCHRONIZED, 如果safety设置为FULL并且主效劳器断开了和见证效劳器的连接但依然可以进行事务处理,那么数据库状态为exposed。 如果safety设置为FULL并且主效劳器无法和其他效劳器组成quorum,那么将无法提供数据库效劳。不允许任何的用户连接和事务处理。下表显示了主数据库可

49、能的状态,以及导致状态转换的一些事件。表 5. 主数据库状态,safety为FULL以及safety为OFF。Safety主效劳器初始状态事件导致结果QuorumExposed能否提供数据库效劳FULLSYNCHRONIZING同步发生SYNCHRONIZED是否是FULLSYNCHRONIZED会话暂停SUSPENDED是是是FULLSYNCHRONIZED镜像效劳器上出现Redo错误SUSPENDED是,使用见证效劳器是是否,没有见证效劳器-否FULLSYNCHRONIZED镜像效劳器不可用DISCONNECTED是,使用见证效劳器是是否,没有见证效劳器-否OFFSYNCHRONIZING

50、会话暂停SUSPENDED-是是OFFSYNCHRONIZING镜像效劳器上出现Redo错误SUSPENDED-是是OFFSYNCHRONIZING镜像效劳器不可用DISCONNECTED-是是当safety设置为FULL,主数据库首先进入SYNCHRONIZING状态,只要和镜像数据库同步,两个伙伴都进入SYNCHRONIZED状态。当safety设置为OFF,伙伴数据库从SYNCHRONIZING状态开始并在整个镜像过程中保持该状态。对于这两个safety设置,如果会话被挂起或者出现了镜像效劳器的redo错误,那么主数据库进入SUSPENDED状态。如果镜像效劳器不可用,那么主数据库进入D

51、ISCONNECTED状态。在DISCONNECTED和SUSPENDED状态下:当safety设置为FULL,如果主效劳器无法和见证效劳器或者镜像效劳器自称quorum,那么主数据库被视为exposed。这意味着主数据库为活动状态,支持用户连接和事务处理。 但是没有日志记录被发送到镜像数据库。因此如果主数据库失败了,那么镜像数据库不包含任何自主数据库进入exposed状态后主效劳器上发生的事务。同样的,也不可以清理主数据库的事务日志,这导致日志文件的无限增长。当safety设置为FULL,如果主效劳器无法和其他效劳器组成quorum,它将不能提供数据库效劳。所有用户将被断开连接,也不允许新的

52、事务处理。 当safety设置为OFF,朱数据库被视为exposed,因为没有事务日志记录被发送到镜像。注意:Management Studios Object Explorer会在Server树图中数据库名称的旁边报告主数据库状态。将主数据库的SYNCHRONIZED状态报告为 Principal, Synchronizing,DISCONNECTED状态报告为Principal, Disconnected.镜像数据库状态镜像数据库具有和主数据库相同的状态,但是由于镜像数据库始终处于nonrecovered状态,因此在担当镜像角色的时候不能提供数据库效劳。下表显示了可以导致镜像效劳器和数据库

53、状态改变的一些最常见事件。表 6. 镜像效劳器状态,safety为FULL以及safety为OFF.Safety镜像效劳器状态事件导致的结果FULLSYNCHRONIZING同步发生SYNCHRONIZEDFULLSYNCHRONIZED会话暂停SUSPENDEDFULLSYNCHRONIZED镜像效劳器上出现Redo错误SUSPENDEDFULLSYNCHRONIZED主数据库不可用DISCONNECTEDOFFSYNCHRONIZING会话暂停SUSPENDEDOFFSYNCHRONIZING镜像效劳器上出现Redo错误SUSPENDED和主数据库一样,Management Studios

54、 Object Explorer在Server树的数据库名称旁边报告镜像数据库状态。镜像数据库的SYNCHRONIZED状态报告为Mirror, Synchronizing,DISCONNECTED状态报告为Mirror, Disconnected.见证效劳器状态在目录视图中有三种见证效劳器状态,CONNECTED、 DISCONNECTED和UNKNOWN。 表 7. Witness效劳器状态记录在伙伴效劳器上见证效劳器状态事件导致的结果CONNECTED见证效劳器不可用DISCONNECTED主效劳器无法初始化镜像UNKNOWN由于见证效劳器状态真正记录在伙伴效劳器而不是见证效劳器上,因此

55、这些状态是从有利于伙伴的角度来设置的,因此当您看到见证效劳器为DISCONNECTED状态时,意味着伙伴和见证效劳器断开了。数据库镜像启动后,如果镜像效劳器无法与主效劳器进行初始化,那么见证效劳器进入UNKNOWN状态。 传输事务日志记录SQLServer主效劳器和镜像效劳器传输消息和日志记录的次序根据事务平安性的设置而不同。我们先研究同步传输,然后再研究异步传输。 当SQLServer将事务事件记录在事务日志中时,日志记录被写入磁盘前暂时存放在日志缓冲区中。 数据库镜像时,每次日志缓冲区被输出到硬盘时硬化,主效劳器也将相同的日志记录块发送到镜像效劳器。1. 当safety设置为FULL,只要

56、SQLServer主效劳器硬化它的日志记录块,就同时将相同的日志记录块发送到镜像效劳器,并认为本地的日志I/O和远程镜像效劳器的日志I/O从本质上来说是一样 的。这种传输称为同步的,因为在一个事务提交之前,主效劳器既要等待本地的I/O硬化还要等待等待镜像效劳器有关完成I/O硬化的答复。 每次主效劳器或者镜像效劳器硬化日志缓冲区时,都会将缓冲区中最高的日志序列号LSN+ 1作为mirroring_failover_lsn记录在元数据中。mirroring_failover_lsn用于协商事务日志最后的保障点,这样两个伙伴数据库就可以在初始化时保持同步,在故障转移后也保持同步。 当主效劳器发送日志

57、记录给镜像效劳器时,主效劳器上的mirroring_failover_lsn通常会提前一些。镜像效劳器硬化日志记录时会记录其mirroring_failover_lsn,然后回复主效劳器。但是等主效劳器接收到来自镜像确实认信息时,主效劳器可能已经开始硬化新的一组日志记录了。 表 8显示了主效劳器和镜像效劳器safety为FULL时的一个事件序列例如。表 8.Safety为FULL 同步传输事件序列的例如。Server A Server B Principal, SynchronizedMirror, Synchronized开始一个包含数据更新的多语句事务主数据库的事务日志记录被放入事务日志缓

58、冲区事务日志缓冲区内容被写入磁盘硬化,日志记录块被发送到镜像效劳器,主效劳器记录日志块的 mirroring_failover_lsn,然后等待镜像效劳器确实认。 镜像效劳器接收日志记录并放入事务日志缓冲区镜像效劳器将日志缓冲区输出到磁盘,记录 mirroring_failover_lsn,然后通知主效劳器日志块已被硬化主效劳器接收日志记录已被镜像效劳器硬化到磁盘的通知镜像效劳器继续重新执行REDO队列中的事务日志包含了COMMIT的日志写入事务日志缓冲区事务日志缓冲区内容被写入磁盘硬化,包含了COMMIT的日志记录块被发送到镜像效劳器,主效劳器记录日志块的 mirroring_failove

59、r_lsn,然后等待镜像效劳器确实认。 镜像效劳器接收日志记录并放入事务日志缓冲区镜像效劳器将日志缓冲区输出到磁盘,记录the mirroring_failover_lsn,然后通知主效劳器日志块已被硬化主效劳器接收日志记录已被镜像效劳器硬化到磁盘的通知,至此整个事务提交镜像效劳器继续重新执行REDO队列中包含了COMMIT的事务日志,修改数据页面新事务被写入主效劳器的日志缓冲区以上事件序列中关键的一点就是:当 safety设置为FULL时,主效劳器硬化日志缓冲区以及将日志缓冲区中日志记录的副本发送到镜像效劳器,二者是同时进行的。然后主效劳器开始等待自己的I/O以及镜像效劳器的I/O,两个I/

60、O都完成后才认为事务完成了。当主效劳器接收到来自镜像的答复后,再开始处理下一次硬化。当safety设置为FULL时,尽管主效劳器和镜像效劳器之间协调紧密,但是数据库镜像不是分布式事务,也不使用两阶段提交协议。 在数据库镜像中,两个事务分别在两台效劳器上执行,并不是一个跨效劳器的分布式事务。数据库镜像不使用伙伴效劳器作为分布式事务中的资源管理器。数据库镜像事务不经历准备和提交阶段。 最重要的是,镜像效劳器上事务提交失败不会导致主效劳器上的事务会滚,这一点与分布式事务不同。2. 当safety设置为OFF时,主效劳器不等待来自镜像效劳器确实认消息,因此主效劳器上已提交事务数量可能多于镜像效劳器,如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论