数据库镜像操作模式

本主题介绍数据库镜像会话的同步和异步作模式。

注释

有关数据库镜像的简介,请参阅数据库镜像(SQL Server)。

术语和定义

本部分介绍本主题的核心几个术语。

高性能模式
数据库镜像会话以异步方式运行,仅使用主体服务器和镜像服务器。 唯一的角色切换形式是强制服务(可能丢失数据)。

高安全性模式 (High-safety mode)
数据库镜像会话以同步方式运行,并且(可选)使用见证服务器以及主体服务器和镜像服务器。

事务安全性
特定于镜像的数据库属性,用于确定数据库镜像会话是同步运行还是异步运行。 有两个安全级别:FULL 和 OFF。

见证
仅在高安全模式下使用时,SQL Server 的一个可选实例可以使镜像服务器识别是否需要自动故障转移。 与两个故障转移伙伴不同,见证不会提供数据库服务。 见证服务器唯一的角色是支持自动故障转移。

异步数据库镜像(High-Performance 模式)

本部分介绍异步数据库镜像的工作原理、何时适合使用高性能模式,以及如何在主体服务器发生故障时做出响应。

注释

大多数版本的 SQL Server 2014 仅支持同步数据库镜像(“仅安全完全”)。 有关完全支持数据库镜像的版本的信息,请参阅 SQL Server 2014 各版本支持的功能中的“高可用性(AlwaysOn)。”

当事务安全设置为 OFF 时,数据库镜像会话将异步运行。 异步操作仅支持一种操作模式,高性能模式。 此模式以牺牲高可用性为代价提高性能。 高性能模式仅使用主体服务器和镜像服务器。 镜像服务器上的问题永远不会影响主体服务器。 在主服务器丢失时,镜像数据库被标记为 DISCONNECTED,但仍可作为暖备状态使用。

高性能模式仅支持一种角色切换:强制服务(可能丢失数据),后者使用镜像服务器作为暖备用服务器。 强制服务是对主体服务器故障的可能响应之一。 因为可能会导致数据丢失,因此在强制将服务切换到镜像之前,您应考虑其他替代方案。 有关详细信息,请参阅本主题后面的“ 响应主体故障”。

下图显示了使用高性能模式的会话配置。

仅限合作伙伴配置的会话

在高性能模式下,只要主体服务器将事务的日志发送到镜像服务器,主体服务器就会向客户端发送确认,而无需等待镜像服务器的确认。 事务提交,而无需等待镜像服务器将日志写入磁盘。 异步作允许主体服务器以最小事务延迟运行。

镜像服务器尝试跟上主体服务器发送的日志记录。 但镜像数据库可能稍落后于主体数据库,但数据库之间的差距通常很小。 但是,如果主体服务器处于繁重的工作负载下,或者镜像服务器的系统负载过大,则差距可能会变得很大。

何时适合 High-Performance 模式?

高性能模式在灾难恢复方案中非常有用,在这种方案中,主体服务器和镜像服务器被大距离分隔,并且不希望小错误影响主体服务器。

注释

日志传送可以是数据库镜像的补充,是异步数据库镜像的有利替代方法。 有关日志传送的优点的信息,请参阅高可用性解决方案 (SQL Server)。 有关将日志传送与数据库镜像配合使用的信息,请参阅数据库镜像和日志传送(SQL Server)。

见证服务器对 High-Performance 模式的影响

如果使用 Transact-SQL 配置高性能模式,只要 SAFETY 属性设置为 OFF,我们强烈建议将 WITNESS 属性设置为 OFF。 见证可以与高性能模式共存,但见证不提供任何好处并引入风险。

如果任一伙伴出现故障时见证服务器与会话断开连接,则数据库将不可用。 这是因为,即使高性能模式不需要仲裁者,若设置了一个,会话需要由两个或更多的服务器实例组成的仲裁。 如果连接失去法定人数,则无法为数据库提供服务。

当见证服务器被设置为高性能模式会话时,执行仲裁意味着:

  • 如果镜像服务器丢失,则主服务器必须连接到见证服务器。 否则,主体服务器将数据库脱机,直到见证服务器或镜像服务器重新加入会话。

  • 如果主体服务器丢失,需要将服务切换到镜像服务器,并要求镜像服务器连接到见证服务器。

应对校长失误

主体失败时,数据库所有者有多个选择,如下所示:

  • 将数据库保持不可用状态,直到主要服务器再次可以用。

    如果主体数据库及其事务日志保持不变,则此选项会保留所有已提交的事务,但代价是可用性。

  • 停止数据库镜像会话,手动更新数据库,然后开始新的数据库镜像会话。

    如果主体数据库丢失,但主体服务器仍在运行,请立即尝试备份主体数据库上的日志尾部。 如果结尾日志备份成功,则删除镜像可能是最佳选择。 删除镜像后,可以将日志还原到以前的镜像数据库,从而保留所有数据。

    注释

    如果结尾日志备份失败,并且无法等待主体服务器恢复,请考虑强制服务,这具有维护会话状态的优势。

  • 强制在镜像服务器上进行服务操作(可能导致数据丢失)。

    强制服务严格是灾难恢复方法,应谨慎使用。 仅当主服务器宕机时,且会话为异步(事务安全性设置为 OFF),并且会话没有任何见证服务器(WITNESS 属性设置为 OFF)或见证连接到镜像服务器(即,与镜像服务器具有仲裁)时,才能强制服务。

    强制服务会导致镜像服务器充当主体角色,并为客户端提供数据库副本。 强制服务时,主体尚未发送到镜像服务器的任何事务日志都将丢失。 因此,只有在可能出现数据丢失且对数据库即时可用性有严格要求的情况下,才应限制强制性服务。 有关强制服务的工作原理以及使用它的最佳做法的信息,请参阅数据库镜像会话期间的角色切换(SQL Server)。

同步数据库镜像(High-Safety 模式)

本部分介绍同步数据库镜像的工作方式,包括可选的高安全模式(具有自动故障转移和无自动故障转移),并包含有关见证服务器在自动故障转移中作用的信息。

当事务安全设置为 FULL 时,数据库镜像会话以高安全模式运行,并在初始同步阶段后同步运行。 本部分介绍为同步作配置的数据库镜像会话的详细信息。

若要实现会话的同步作,镜像服务器必须将镜像数据库与主体数据库同步。 会话开始时,主体服务器开始将其活动日志发送到镜像服务器。 镜像服务器会尽快将所有传入日志记录写入磁盘。 将所有收到的日志记录写入磁盘后,数据库就会同步。 只要合作伙伴保持通信状态,数据库就会保持同步。

注释

若要监视数据库镜像会话中的状态更改,请使用 数据库镜像状态更改 事件类。 有关详细信息,请参阅 数据库镜像状态更改事件类

同步完成后,主体数据库上提交的每个事务也会在镜像服务器上提交,从而保证数据的保护。 这是通过等待在主体数据库上提交事务来实现的,直到主体服务器收到来自镜像服务器的消息,指出它已将事务日志强化到磁盘。 请注意,等待此消息会增加事务的延迟。

同步所需的时间主要取决于在会话开始时镜像数据库落后于主体数据库的时间(由最初从主体服务器接收的日志记录数)、主体数据库的工作负载以及镜像系统的速度。 同步后,会话未完成的持久化日志将在镜像数据库的重做队列中保留。

镜像数据库一旦同步,两个数据库副本的状态都会更改为 SYNCHRONIZED。

同步操作按下列方式维护:

  1. 从客户端接收事务时,主体服务器会将事务的日志写入事务日志。

  2. 主体服务器将事务写入数据库,并发将日志记录发送到镜像服务器。 主服务器在向客户端确认事务已提交或回滚之前,先等待镜像服务器的确认。

  3. 镜像服务器将日志写入磁盘,并向主服务器返回确认。

  4. 从镜像服务器接收确认时,主体服务器会向客户端发送确认消息。

高安全性模式要求数据在两个位置之间同步,从而保护数据。 所有已提交的事务都保证写入镜像服务器上的磁盘。

High-Safety 无自动故障转移模式

下图显示了没有自动故障转移的高安全模式的配置。 配置仅包含两个合作伙伴。

在没有见证人的情况下沟通的合作伙伴

当合作伙伴已连接且数据库已同步时,支持手动故障转移。 如果镜像服务器实例出现故障,则主体服务器实例不受影响,并且会公开运行(即不镜像数据)。 如果主服务器丢失,则镜像挂起,但可以将服务强制切换到镜像服务器(可能会有数据丢失)。 有关详细信息,请参阅数据库镜像会话期间的角色切换 (SQL Server)

具有自动故障转移的 High-Safety 模式

自动故障转移通过在丢失一台服务器后保障数据库持续服务,从而提供高可用性。 自动故障转移要求会话拥有第三个服务器实例,即 见证服务器,理想情况下驻留在第三台计算机上。 下图显示了支持自动故障转移的高安全模式会话的配置。

会话的见证人和两个伙伴

与两个合作伙伴不同,见证服务器不管理数据库。 见证服务器只是通过验证主体服务器是否已启动并正常运行来支持自动故障转移。 仅当镜像和见证服务器在与主体服务器断开连接后仍然保持相互连接时,镜像服务器才会启动自动故障转移。

设置见证时,会话需要至少两个服务器实例之间形成仲裁关系,以确保数据库可用。 有关详细信息,请参阅数据库镜像见证仲裁:见证如何影响数据库可用性(数据库镜像)

自动故障转移需要以下条件:

  • 数据库已同步。

  • 在所有三个服务器实例都已连接时发生故障,而见证服务器和镜像服务器仍保持连接状态。

合作伙伴的丢失具有以下效果:

  • 如果主服务器在上述条件下不可用,则会发生自动切换。 镜像服务器切换到主体的角色,并将其数据库作为主体数据库提供。

  • 如果在这些条件未得到满足的情况下主体服务器变得不可用,可能需要强制服务(这可能导致数据丢失)。 有关详细信息,请参阅数据库镜像会话期间的角色切换 (SQL Server)

  • 如果唯一的镜像服务器不可用,主体服务器和见证服务器将继续运行。

如果会话失去见证,仲裁需要两个合作伙伴。 如果任一伙伴失去仲裁,则两个合作伙伴将失去仲裁,并且数据库在重新建立仲裁之前变得不可用。 此仲裁要求可确保在缺少见证服务器的情况下,数据库永远不会 运行公开,即不进行镜像。

注释

如果预期见证在长时间内保持断开连接状态,建议从会话中删除其,直到该见证可用为止。

Transact-SQL 设置和数据库镜像操作模式

本部分介绍数据库镜像会话,包括镜像数据库和见证服务器的 ALTER DATABASE 设置和状态(如果有)。 本部分面向主要或专门使用 Transact-SQL 管理数据库镜像的用户,而不是使用 SQL Server Management Studio。

小窍门

作为使用 Transact-SQL 的替代方法,可以使用“数据库属性”对话框的“镜像”页控制对象资源管理器中的会话的作模式。 有关详细信息,请参阅使用 Windows 身份验证建立数据库镜像会话(SQL Server Management Studio)。

事务安全和见证状态如何影响运行模式

会话的操作模式由其事务安全设置和见证状态的组合决定。 数据库所有者可以随时更改事务安全级别,并可以添加或删除见证。

事务安全

事务安全性是特定于镜像的数据库属性,用于确定数据库镜像会话是同步还是异步运行。 有两个安全级别:FULL 和 OFF。

  • 安全满

    完全事务安全会导致会话在高安全模式下同步运行。 如果有见证人,系统会话支持自动故障转移。

    使用 ALTER DATABASE 语句建立会话时,会话从 SAFETY 属性设置为 FULL 开始;也就是说,会话以高安全模式开始。 会话开始后,你可以添加证人。

    有关详细信息,请参阅本主题前面的 同步数据库镜像(High-Safety 模式)。

  • 关闭安全

    关闭事务安全会导致会话在高性能模式下异步运行。 如果 SAFETY 属性设置为 OFF,则 WITNESS 属性还应设置为 OFF(默认值)。 针对见证在高性能模式下的影响的信息,请参阅本主题中后面的“见证状态”。 有关在事务安全关闭的情况下运行的详细信息,请参阅本主题前面的 异步数据库镜像(High-Performance 模式)。

数据库的事务安全性设置记录在每个伙伴的 sys.database_mirroring 目录视图中的 mirroring_safety_levelmirroring_safety_level_desc 列内。 有关详细信息,请参阅sys.database_mirroring(Transact-SQL)。

数据库所有者可以随时更改事务安全级别。

见证的状况

如果设置了见证,则需要法定人数,因此见证的状态始终很重要。

如果存在这样的情况,见证有两种状态之一:

  • 当见证者连接到合作伙伴时,与该伙伴处于连接状态,并且与该伙伴具有法定人数。 在这种情况下,即使其中一个合作伙伴不可用,也可以提供数据库。

  • 当见证存在但未连接到合作伙伴时,见证处于“未知”或“断开连接”状态,相对于该伙伴。 在这种情况下,见证服务器与该伙伴缺少仲裁,如果伙伴未相互连接,则数据库将变得不可用。

有关仲裁的信息,请参阅仲裁: 见证如何影响数据库可用性(数据库镜像)。

服务器实例上每个见证的状态记录在sys.database_mirroring目录视图中的mirroring_witness_statemirroring_witness_state_desc列中。 有关详细信息,请参阅sys.database_mirroring(Transact-SQL)。

下表总结了会话的操作模式如何取决于其事务安全设置及其见证状态。

操作模式 事务安全性 见证状态
高性能模式 关闭 NULL (无见证服务器)2
高安全性模式,没有自动故障转移 完整的 NULL(无见证)
具有自动故障转移1 的高安全模式 完整的 连接

1 如果见证服务器断开连接,我们建议设置 WITNESS OFF,直到见证服务器实例可用。

2 如果见证服务器以高性能模式存在,则见证服务器不参与会话。 但是,若要使数据库可用,至少两个服务器实例必须保持连接状态。 因此,我们建议在高性能模式会话中将 WITNESS 属性设置为 OFF。 有关详细信息,请参阅仲裁机制:见证角色如何影响数据库可用性(镜像)。

查看见证人的安全设置和状态

若要查看数据库的安全设置和数据库镜像见证的状态,请使用 sys.database_mirroring 目录视图。 相关列如下所示:

因子 DESCRIPTION
事务安全性 mirroring_safety_levelmirroring_safety_level_desc 镜像数据库更新的事务安全设置,其中一项为:

未知

关闭

完整的

NULL= 数据库未联机。
见证人是否存在? 镜像见证名称 数据库镜像见证服务器名称或为 NULL,表示不存在见证服务器。
见证状态 mirroring_witness_statemirroring_witness_state_desc 数据库中特定的合作伙伴的证人状态。

未知

连接

断开

NULL = 不存在见证服务器或数据库未联机。

例如,在主体或镜像服务器上,输入:

SELECT mirroring_safety_level_desc, mirroring_witness_name, mirroring_witness_state_desc FROM sys.database_mirroring  

有关此目录视图的详细信息,请参阅sys.database_mirroring(Transact-SQL)。

影响主体服务器故障时行为的因素

下表总结了事务安全设置、数据库状态和见证服务器状态对主服务器故障时镜像会话行为的综合影响。

事务安全性 镜像数据库的镜像状态 见证状态 主体丢失时的行为
完整的 同步 连接 自动故障切换发生。
完整的 同步 断开 镜像服务器停止;无法进行故障转移,并且无法使数据库可用。
关闭 暂停或断开连接 NULL(无见证) 服务可能会被强制切换到镜像服务器(可能造成数据丢失)。
完整的 同步中或已挂起 NULL(无见证) 服务可能被强制切换到镜像服务器(存在数据丢失的风险)。

相关任务

另请参阅

监视数据库镜像 (SQL Server)
数据库镜像见证服务器