一 数据库镜像简介
1.1 数据库镜像概述
数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不一样的 SQL Server 数据库引擎服务器实例上。 一般,这些服务器实例驻留在不一样位置的计算机上。 启动数据库上的数据库镜像操做时,在这些服务器实例之间造成一种关系,称为“数据库镜像会话”。
其中一个服务器实例使数据库服务于客户端(“主体服务器”), 另外一个服务器实例则根据镜像会话的配置和状态,充当热备用或温备用服务器(“镜像服务器”)。 同步数据库镜像会话时,数据库镜像提供热备用服务器,可支持在已提交事务不丢失数据的状况下进行快速故障转移。 未同步会话时,镜像服务器一般用做热备用服务器(可能形成数据丢失)。
在“数据库镜像会话”中,主体服务器和镜像服务器做为“伙伴”进行通讯和协做。 两个伙伴在会话中扮演互补的角色:“主体角色”和“镜像角色”。 在任何给定的时间,都是一个伙伴扮演主体角色,另外一个伙伴扮演镜像角色。 每一个伙伴拥有其当前角色。 拥有主体角色的伙伴称为“主体服务器”,其数据库副本为当前的主体数据库。 拥有镜像角色的伙伴称为“镜像服务器”,其数据库副本为当前的镜像数据库。 若是数据库镜像部署在生产环境中,则主体数据库即为“生产数据库”。
数据库镜像涉及尽快将对主体数据库执行的每项插入、更新和删除操做“重作”到镜像数据库中。 重作经过将活动事务日志记录的流发送到镜像服务器来完成,这会尽快将日志记录按顺序应用到镜像数据库中。 与逻辑级别执行的复制不一样,数据库镜像在物理日志记录级别执行。 从 SQL Server 2008 开始,在事务日志记录的流发送到镜像服务器以前,主体服务器会先将其压缩。 在全部镜像会话中都会进行这种日志压缩。
提示:给定的服务器实例能够参与到多个具备相同或不一样伙伴的并发数据库镜像会话中。 某个服务器实例可能在某些会话中是伙伴,而在其余会话中则是见证服务器。 镜像服务器实例必须正在运行 SQL Server 的相同版本。
1.2 数据库镜像的优势
数据库镜像是一种简单的策略,具备下列优势:
发生灾难时,在具备自动故障转移功能的高安全性模式下,自动故障转移可快速使数据库的备用副本联机(而不会丢失数据)。 在其余运行模式下,数据库管理员能够选择强制服务(可能丢失数据),以替代数据库的备用副本。 有关详细信息,请参阅本主题后面的角色切换。
在 SQL Server 2008 Enterprise 或更高版本上运行的数据库镜像伙伴会自动尝试解决某些阻止读取数据页的错误。 没法读取页的伙伴会向其余伙伴请求新副本。 若是此请求成功,则将以新副本替换不可读的页,这一般会解决该错误。
为了尽可能减小镜像服务器的停机时间,您能够按顺序升级承载故障转移伙伴的 SQL Server 实例。 这样只会致使一个故障转移的停机时间。 这种形式的升级称为“滚动升级”。
1.3 数据库镜像术语和定义
- 自动故障转移 (automatic failover)
一种过程,当主体服务器不可用时,该过程将致使镜像服务器接管主体服务器的角色,并使其数据库的副本联机以做为主体数据库。
- 故障转移伙伴 (failover partners)
充当镜像数据库的角色切换伙伴的两个服务器实例(主体服务器或镜像服务器)。
是指在负责将服务传输到镜像数据库(但它处于未知状态)的主体服务器出现故障时数据库全部者启动的故障转移。
- 高性能模式 (High-performance mode)
数据库镜像会话异步运行并仅使用主体服务器和镜像服务器。 惟一的角色切换形式是强制服务(可能形成数据丢失)。
- 高安全性模式 (High-safety mode)
数据库镜像会话同步运行并能够选择使用见证服务器、主体服务器和镜像服务器。
上图所示不带自动故障转移的高安全性模式;
上图所示带自动故障转移的高安全性模式。
是指在负责将服务从主体数据库传输到镜像数据库(处于同步状态)的主体服务器仍在运行时数据库全部者启动的故障转移。
一般与主体数据库彻底同步的数据库副本。
在数据库镜像配置中,镜像数据库所在的服务器实例。
在数据库镜像配置中,镜像数据库所在的服务器实例。
- 主体数据库 (principal database)
数据库镜像中的一种读写数据库,其事务日志记录将应用到数据库的只读副本(镜像数据库)。
在数据库镜像中,是指当前做为主体数据库的数据库所属于的伙伴。
收到的等待镜像服务器磁盘的事务日志记录。
主体服务器和镜像服务器担任互补的主体角色和镜像角色。 也能够由第三个服务器实例来担任见证服务器角色。
镜像接管主体角色。
在主体服务器的日志磁盘累积的未发送的事务日志记录。
是指主体服务器、镜像服务器和见证服务器(若是存在)之间进行数据库镜像期间造成的关系。
镜像会话启动或继续后,将累积在主体服务器上的主体数据库日志记录发送给镜像服务器的过程,此过程将这些日志记录尽快写入磁盘,以便与主体服务器保持同步。
- 事务安全 (Transaction safety)
一种镜像特定的数据库属性,用于肯定数据库镜像会话是同步运行仍是异步运行。 有两种安全级别:FULL 和 OFF。
仅用于高安全性模式,SQL Server 的一个可选实例,它能使镜像服务器识别什么时候要启动自动故障转移。 与这两个故障转移伙伴不一样的是,见证服务器并不能用于数据库。 见证服务器的惟一角色是支持自动故障转移。
1.4 运行模式
数据库镜像会话以同步操做或异步操做运行。 在异步操做下,事务不须要等待镜像服务器将日志写入磁盘即可提交,这样可最大程度地提升性能。 在同步操做下,事务将在伙伴双方处提交,但会延长事务滞后时间。
有两种镜像运行模式。 一种是“高安全性模式”,它支持同步操做。 在高安全性模式下,当会话开始时,镜像服务器将使镜像数据库尽快与主体数据库同步。 一旦同步了数据库,事务将在伙伴双方处提交,这会延长事务滞后时间。
第二种运行模式,即“高性能模式”,异步运行。 镜像服务器尝试与主体服务器发送的日志记录保持同步。 镜像数据库可能稍微滞后于主体数据库。 可是,数据库之间的时间间隔一般很小。 可是,若是主体服务器的工做负荷太高或镜像服务器系统的负荷太高,则时间间隔会增大。
全部数据库镜像会话都只支持一台主体服务器和一台镜像服务器。
具备自动故障转移功能的高安全性模式要求使用第三个服务器实例,称为“见证服务器”。 与这两个伙伴不一样的是,见证服务器并不能用于数据库。 见证服务器经过验证主体服务器是否已启用并运行来支持自动故障转移。 只有在镜像服务器和见证服务器与主体服务器断开链接以后而保持相互链接时,镜像服务器才启动自动故障转移。
注意:创建新的镜像会话或将见证服务器添加到现有镜像配置要求涉及的全部服务器实例运行相同版本的 SQL Server。 可是,当升级到 SQL Server 2008 或更高版本时,所涉及的实例的版本能够不一样。
1.5 事务安全与运行模式
运行模式是异步仍是同步取决于事务安全设置。 若是专门使用 SQL Server Management Studio 来配置数据库镜像,则在您选择运行模式时,将自动配置事务安全设置。
若是使用 Transact-SQL 配置数据库镜像,则必须了解如何设置事务安全。 事务安全由 ALTER DATABASE 语句的 SAFETY 属性控制。 在正在镜像的数据库中,SAFETY 为 FULL 或 OFF。
若是将 SAFETY 选项设置为 FULL,则在初始同步阶段后,数据库镜像操做将同步执行。 若是在高安全性模式下设置见证服务器,则会话支持自动故障转移。
若是将 SAFETY 选项设置为 OFF,则数据库镜像操做将异步执行。 会话在高性能模式下运行,而且 WITNESS 选项也应设置为 OFF。
二 角色切换
2.1 切换概述
在数据库镜像会话上下文中,一般可使用一个称为“角色切换”的过程来互换主体角色和镜像角色。 角色切换涉及将主体角色转换给镜像服务器的操做。 在角色切换中,镜像服务器充当主体服务器的“故障转移伙伴”。 进行角色切换时,镜像服务器将接管主体角色,并使其数据库的副本联机以做为新的主体数据库。 之前的主体服务器(若是有)将充当镜像角色,而且其数据库将变为新的镜像数据库。 这些角色能够反复地来回切换。
2.2 角色切换形式
这要求使用高安全性模式并具备镜像服务器和见证服务器。 数据库必须已同步,而且见证服务器必须链接到镜像服务器。
见证服务器的做用是验证给定的伙伴服务器是否已启动并运行。 若是镜像服务器与主体服务器断开链接,但见证服务器仍与主体服务器保持链接,则镜像服务器没法启动故障转移。
这要求使用高安全性模式。 伙伴双方必须互相链接,而且数据库必须已同步。
在高性能模式和不带自动故障转移功能的高安全性模式下,若是主体服务器出现故障而镜像服务器可用,则能够强制服务运行。
提示:高性能模式用于在没有见证服务器的状况下运行。 但若是存在见证服务器,则强制服务将要求见证服务器链接到镜像服务器。
在任何一种角色切换状况下,一旦新的主体数据库联机,客户端应用程序便会经过从新链接到数据库来快速恢复。
给定的服务器实例能够参与到多个具备相同或不一样服务器实例的并发数据库镜像会话(每一个镜像数据库发生一次)中。 一般,服务器实例专门用做其全部数据库镜像会话中的伙伴或见证服务器。 可是,因为每一个会话都独立于其余会话,所以服务器实例能够在某些会话中充当伙伴,而在其余会话中充当见证服务器。 例如,请看三个服务器实例(SSInstance_一、SSInstance_2 和 SSInstance_3)中的下列四个会话。 每一个服务器实例均可在某些会话中做为伙伴,而在其余会话中做为见证服务器:
服务器实例
|
数据库 A 的会话
|
数据库 B 的会话
|
数据库 C 的会话
|
数据库 D 的会话
|
SSInstance_1
|
见证服务器
|
伙伴
|
伙伴
|
伙伴
|
SSInstance_2
|
伙伴
|
见证服务器
|
伙伴
|
伙伴
|
SSInstance_3
|
伙伴
|
伙伴
|
见证服务器
|
见证服务器
|
下图说明了都做为伙伴参与两个镜像会话的两个服务器实例。 一个会话用于名为 Db_1 的数据库,另外一个会话用于名为 Db_2 的数据库。
每一个数据库独立于其余数据库。 例如,服务器实例最初多是两个数据库的镜像服务器。 若是其中一个数据库发生故障转移,则服务器实例将变为已发生故障转移的数据库的主体服务器,同时为其余数据库保留镜像服务器。
或者有一个服务器实例,它是两个或多个以具备自动故障转移功能的高安全性模式运行的数据库的主体服务器,若是此服务器实例失败,则全部数据库将自动故障转移到其相应的镜像数据库。
提示:若是将一个服务器实例设置成既做为伙伴又做为见证服务器参与会话,请确保数据库镜像端点可以支持两种角色。 同时,还要确保系统具备足够资源以减小资源争用。
注意:因为镜像数据库相互独立,所以这些数据库不能做为一个组来进行故障转移。
三 其余
3.1 暂停会话对主体事务日志的影响
数据库全部者能够随时暂停会话。 执行暂停操做将保留在删除镜像时的会话状态。 暂停会话时,主体服务器不会向镜像服务器发送任何新的日志记录。 全部这些记录将保持活动状态,并堆积在主体数据库的事务日志中。 只要数据库镜像会话保持暂停状态,事务日志就不会被截断。 所以,若是数据库镜像会话暂停时间过长,则可能会使该日志填满。
3.2 设置数据库镜像会话
开始镜像会话以前,数据库全部者或系统管理员必须建立镜像数据库,设置端点和登陆名。在某些状况下,还要建立并设置证书。
3.3 与其余数据库引擎功能的互操做性和共存
数据库镜像能够与 SQL Server 的下列功能或组件一块儿使用。
注意:后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工做中使用该功能,并着手修改当前还在使用该功能的应用程序。可改用 AlwaysOn 可用性组。
参考官方文档:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms189852(v%3dsql.110)