数据库镜像 (SQL Server)

注释

此功能将在Microsoft SQL Server 的未来版本中删除。 避免在新开发工作中使用此功能,并计划修改当前使用此功能的应用程序。 请改用Always On可用性组。

数据库镜像 是提高 SQL Server 数据库可用性的解决方案。 镜像基于每个数据库实现,并且只适用于使用完整恢复模式的数据库。

重要

有关支持数据库镜像、限制、先决条件、配置合作伙伴服务器的建议以及部署数据库镜像的建议的信息,请参阅 数据库镜像的先决条件、限制和建议

数据库镜像的优点

数据库镜像是一种提供以下优势的简单策略:

  • 提高数据库的可用性。

    发生灾难时,在具有自动故障转移的高安全模式下,故障转移会快速使数据库的备用副本联机(不会丢失数据)。 在其他操作模式下,数据库管理员可以选择将服务强制切换到数据库的备用副本(这可能导致数据丢失)。 有关详细信息,请参阅本主题后面的 角色切换

  • 提高数据保护。

    数据库镜像提供数据的完整或几乎完全冗余,具体取决于作模式是高安全性还是高性能。 有关详细信息,请参阅本主题后面的 作模式

    在 SQL Server 2008 Enterprise 或更高版本上运行的数据库镜像伙伴会自动尝试解决阻止读取数据页的某些类型的错误。 无法读取页面的合作伙伴从其他合作伙伴请求新副本。 如果此请求成功,则将以新副本替换不可读的页,这通常会解决该错误。 有关详细信息,请参阅“自动页面修复”(对于可用性组和数据库镜像)。

  • 改进了升级期间生产数据库的可用性。

    若要最大程度地减少镜像数据库的停机时间,可以按顺序升级托管故障转移伙伴的 SQL Server 实例。 这将只涉及一次故障转移停机时间。 这种升级形式称为 滚动升级。 有关详细信息,请参阅 在系统上安装 Service Pack,同时尽量缩短镜像数据库的停机时间

数据库镜像术语和定义

自动故障转移
主体服务器不可用时,镜像服务器将接管主体服务器的角色,并将数据库副本联机作为主体数据库。

故障转移伙伴
充当镜像数据库的角色切换伙伴的两个服务器实例(主体服务器或镜像服务器)。

强制服务
当主体服务器发生故障时,数据库所有者会启动故障转移,将服务转移到镜像数据库,而此时镜像数据库可能处于未知状态。

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

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

手动故障转移
数据库所有者启动的故障转移,而主体服务器仍在运行中,该故障转移会将服务从主体数据库传输到镜像数据库,同时它们处于同步状态。

镜像数据库
通常与主体数据库完全同步的数据库的副本。

镜像服务器
在数据库镜像配置中,镜像数据库所在的服务器实例。

镜像服务器
在数据库镜像配置中,存放镜像数据库的服务器实例。

主数据库
在数据库镜像中,一个读写数据库,其事务日志记录应用于数据库的只读副本(镜像数据库)。

主体服务器
在数据库镜像中,其数据库当前为主体数据库的伙伴。

重做队列
收到在镜像服务器磁盘上等待的事务日志记录。

角色
主体服务器和镜像服务器执行互补主体和镜像角色。 可选地,见证者角色由第三个服务器实例执行。

角色切换
由镜像接管主体角色。

发送队列
在主体服务器的日志磁盘上累积的未输入事务日志记录。

会议
在主体服务器、镜像服务器和见证服务器之间数据库镜像期间发生的关系(如果存在)。

镜像会话启动或恢复后,主体服务器上累积的主体数据库的日志记录将发送到镜像服务器,以便尽快将这些日志记录写入磁盘以赶上主体服务器。

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

见证
仅限用于高安全模式的场合,一个可选的 SQL Server 实例使镜像服务器能够识别何时启动自动故障转移。 与两个故障转移伙伴不同,见证不会提供数据库服务。 见证服务器唯一的角色是支持自动故障转移。

数据库镜像概述

数据库镜像通过在 SQL Server 数据库引擎的不同服务器实例上维护单个数据库的两份副本。 通常,这些服务器实例位于不同位置的计算机上。 在数据库上启动数据库镜像,在这些服务器实例之间启动称为 数据库镜像会话的关系。

一个服务器实例向客户端( 主体服务器)提供数据库。 另一个实例充当热或暖备用服务器( 镜像服务器),具体取决于镜像会话的配置和状态。 当数据库镜像会话同步时,数据库镜像提供一种支持快速故障转移的热备用服务器,而不会丢失已提交事务中的数据。 会话未同步时,镜像服务器通常可用作暖备用服务器(可能丢失数据)。

主体服务器和镜像服务器在数据库镜像会话中作为合作伙伴进行通信与合作。 两个合作伙伴在会话中执行互补角色: 主体角色镜像角色。 在任何给定时间,一个合作伙伴执行主体角色,另一个合作伙伴执行镜像角色。 每个合作伙伴都被视为 拥有 其当前角色。 拥有主体角色的合作伙伴称为 主体服务器,其数据库副本是当前主体数据库。 拥有镜像角色的伙伴称为 镜像服务器,其数据库副本是当前镜像数据库。 在生产环境中部署数据库镜像时,主体数据库是 生产数据库

数据库镜像是指将主体数据库上的每次插入、更新和删除操作尽快重做到镜像数据库上。 重做是通过将一串活动事务日志记录发送到镜像服务器来完成的,该服务器会按照顺序尽快将日志记录应用于镜像数据库。 与在逻辑级别工作的复制不同,数据库镜像在物理日志记录级别工作。 从 SQL Server 2008 开始,主体服务器先压缩事务日志流,然后再将其发送到镜像服务器。 此日志压缩在所有镜像会话中发生。

注释

给定的服务器实例可以与相同或不同的合作伙伴参与多个并发数据库镜像会话。 服务器实例可以是某些会话中的合作伙伴,也可以是其他会话中的见证服务器。 镜像服务器实例必须运行同一版本的 SQL Server。

操作模式

数据库镜像会话可以以同步或异步方式运行。 在异步作下,事务提交时不等待镜像服务器将日志写入磁盘,从而最大限度地提高性能。 在同步操作下,事务在两个节点上提交,但代价是交易延迟增加。

存在两种镜像操作模式。 其中一种是 高安全模式 支持同步操作。 在高安全性模式下,会话启动时,镜像服务器会尽快将镜像数据库与主体数据库同步。 一旦同步了数据库,事务将在伙伴双方处提交,这会延长事务滞后时间。

第二种作模式( 高性能模式)异步运行。 镜像服务器尝试与主体服务器发送的日志记录保持同步。 镜像数据库可能稍微滞后于主体数据库。 但是,数据库之间的时间间隔通常很小。 但是,如果主体服务器处于繁重的工作负载下或镜像服务器的系统过载,则差距可能会变得显著。

在高性能模式下,只要主体服务器向镜像服务器发送日志记录,主体服务器就会向客户端发送确认。 它不会等待镜像服务器的确认。 这意味着事务提交完成,而无需等待镜像服务器将事务的日志写入磁盘。 这种异步操作使主服务器能够以最小事务延迟运行,并可能存在数据丢失的风险。

所有数据库镜像会话仅支持一个主体服务器和一个镜像服务器。 下图显示了此配置。

数据库镜像会话中的合作伙伴

具有自动故障转移的高安全性模式需要一个称为见证的第三个服务器实例。 与两个合作伙伴不同,见证服务器不管理数据库。 通过验证主体服务器是否正常启动和运行,见证服务器支持自动故障转移。 仅当镜像和见证服务器在与主体服务器断开连接后仍然保持相互连接时,镜像服务器才会启动自动故障转移。

下图显示了包含见证的配置。

包含见证的镜像会话

有关详细信息,请参阅本主题后面的 角色切换

注释

建立新的镜像会话或向现有镜像配置添加见证服务器需要所有所涉及的服务器实例都运行同一版本的 SQL Server。 但是,升级到 SQL Server 2008 或更高版本时,所涉及的实例的版本可能会有所不同。 有关详细信息,请参阅 在升级服务器实例时最小化镜像数据库的停机时间

事务安全和操作模式

作模式是异步还是同步取决于事务安全设置。 如果仅使用 SQL Server Management Studio 配置数据库镜像,则在选择操作模式后,事务安全设置会自动配置。

如果使用 Transact-SQL 配置数据库镜像,则必须了解如何设置事务安全性。 事务安全由 ALTER DATABASE 语句的 SAFETY 属性控制。 在被镜像的数据库中,安全性(SAFETY)设置为 FULL 或 OFF。

  • 如果 SAFETY 选项设置为 FULL,则完成初始同步阶段后,数据库镜像作业是同步的。 如果见证服务器在高安全模式下设置,会话支持自动故障转移。

  • 如果 SAFETY 选项设置为 OFF,则数据库镜像作是异步的。 会话以高性能模式运行,并且 WITNESS 选项也应为 OFF。

有关详细信息,请参阅 数据库镜像操作模式

角色切换

在数据库镜像会话的上下文中,主体和镜像角色通常在称为 角色切换的进程中可互换。 角色切换涉及将主体角色传输到镜像服务器。 在角色切换中,镜像服务器充当主体服务器的 故障转移伙伴 。 发生角色切换时,镜像服务器接管主体角色,并将数据库的副本联机为新的主体数据库。 以前的主体服务器(如果可用)承担镜像角色,其数据库将成为新的镜像数据库。 可能,角色可以反复切换。

存在以下三种形式的角色切换。

  • 自动故障转移

    这需要高安全模式以及镜像服务器和见证的存在。 数据库必须已同步,并且见证服务器必须连接到镜像服务器。

    此见证服务器的作用是验证给定的合作伙伴服务器是否正常运行。 如果镜像服务器与主体服务器失去连接,但见证服务器仍连接到主体服务器,则镜像服务器不会启动故障转移。 有关详细信息,请参阅 数据库镜像见证

  • 手动故障转移

    这需要高安全模式。 合作伙伴必须相互连接,并且数据库必须已同步。

  • 强制服务 (可能丢失数据)

    在高性能模式和高安全模式(没有自动故障转移)下,如果主体服务器发生故障且镜像服务器可用,则可能会强制服务。

    重要

    高性能模式旨在在没有见证服务器的情况下运行。 但是,如果见证存在,强制服务要求见证连接到镜像服务器。

在任何角色切换方案中,只要新的主体数据库联机,客户端应用程序就可以通过重新连接到数据库来快速恢复。

并发会话

给定的服务器实例可以同时参与多个并发数据库镜像会话(每个镜像数据库参与一次),使用相同或不同的服务器实例。 服务器实例通常专门作为其所有数据库镜像会话中的伙伴或见证。 但是,由于每个会话独立于其他会话,因此服务器实例可以充当某些会话中的合作伙伴,并充当其他会话中的见证服务器。 例如,请考虑三个服务器实例(SSInstance_1SSInstance_2SSInstance_3)之间的以下四个会话。 每个服务器实例在一些会话中充当合作伙伴,并充当其他会话中的见证服务器:

服务器实例 数据库 A 的会话 数据库 B 的会话 数据库 C 的会话 数据库 D 的会话
SSInstance_1 见证 合作伙伴 合作伙伴 合作伙伴
SSInstance_2 合作伙伴 见证 合作伙伴 合作伙伴
SSInstance_3 合作伙伴 合作伙伴 见证 见证

下图演示了在两个镜像会话中作为合作伙伴一起参与的两个服务器实例。 一个会话用于名为 Db_1的数据库,另一个会话用于名为 Db_2的数据库。

两个并发会话中的两个服务器实例

每个数据库都独立于其他数据库。 例如,服务器实例最初可能是两个数据库的镜像服务器。 如果其中一个数据库进行故障转移,则服务器实例将成为故障转移数据库的主服务器,同时仍然充当另一个数据库的镜像服务器。

作为另一个示例,请考虑一个服务器实例,该服务器实例是两个或多个在高安全模式下运行且具有自动故障转移的数据库的主体服务器,如果服务器实例发生故障,则所有数据库会自动故障转移到各自的镜像数据库。

设置服务器实例时,以便同时作为合作伙伴和见证服务器运行,请确保数据库镜像终结点支持这两个角色(有关详细信息,请参阅数据库镜像终结点(SQL Server))。 此外,请确保系统有足够的资源来减少资源争用。

注释

由于镜像数据库彼此独立,因此数据库无法作为一个组进行故障转移。

客户端连接

Microsoft用于 SQL Server 的 .NET 数据提供程序提供对数据库镜像会话的客户端连接支持。 有关详细信息,请参阅将客户端连接到数据库镜像会话(SQL Server)。

暂停会话对主体事务日志的影响

数据库所有者可以随时暂停会话。 暂停会在删除镜像时保留会话状态。 暂停会话时,主体服务器不会向镜像服务器发送任何新的日志记录。 所有这些记录都保持活动状态,并累积在主体数据库的事务日志中。 只要数据库镜像会话保持暂停,则无法截断事务日志。 因此,如果数据库镜像会话暂停时间过长,则日志可能会填满。

有关详细信息,请参阅暂停和恢复数据库镜像(SQL Server)。

设置数据库镜像会话

在镜像会话开始之前,数据库所有者或系统管理员必须创建镜像数据库、设置终结点和登录名,在某些情况下,创建和设置证书。 有关详细信息,请参阅设置数据库镜像(SQL Server)。

与其他数据库引擎功能的互作性和共存

数据库镜像可用于 SQL Server 的以下功能或组件。

本节中

数据库镜像的先决条件、限制和建议
介绍设置数据库镜像的先决条件和建议。

数据库镜像运行模式
包含有关数据库镜像会话的同步和异步作模式的信息,以及有关在数据库镜像会话期间切换伙伴角色的信息。

数据库镜像见证服务器
介绍见证服务器在数据库镜像中的作用、如何在多个镜像会话中使用单个见证服务器、证人的软件和硬件建议,以及见证服务器在自动故障转移中的角色。 它还包含有关添加或删除见证人信息的信息。

数据库镜像会话期间的角色切换 (SQL Server)
包含有关在数据库镜像会话期间切换合作伙伴角色的信息,包括自动故障转移、手动故障转移和强制服务(可能丢失数据)。 此外,还包含有关估算角色切换期间服务中断的信息。

数据库镜像期间可能出现的故障
讨论物理、作系统和 SQL Server 问题,包括硬错误和软错误,这可能会导致数据库镜像会话失败。 讨论镜像超时机制如何应对软错误。

数据库镜像端点 (SQL Server)
讨论数据库镜像终结点的工作原理。

设置数据库镜像 (SQL Server)
包含有关设置数据库镜像的先决条件、建议和步骤的主题。

将客户端连接到数据库镜像会话 (SQL Server)
包含有关客户端连接字符串属性和用于连接客户端并将其重新连接到镜像数据库的算法的主题。

暂停和恢复数据库镜像 (SQL Server)
讨论在暂停数据库镜像时发生的情况,包括对事务日志截断的影响,并包含有关如何暂停和恢复数据库镜像的说明。

删除数据库镜像 (SQL Server)
讨论删除镜像的影响,并包含有关如何结束会话的说明

监视数据库镜像 (SQL Server)
包含有关使用数据库镜像监视器或 dbmmonitor 存储过程监视数据库镜像或会话的信息。

相关任务

配置任务

使用 SQL Server Management Studio

使用 Transact-SQL

使用 Transact-SQL 或 SQL Server Management Studio

管理任务

Transact-SQL

SQL Server Management Studio

另请参阅

数据库镜像端点 (SQL Server)
自动页面修复 (对于可用性组和数据库镜像)
数据库镜像配置疑难解答 (SQL Server)
数据库镜像:互作性和共存(SQL Server)
数据库镜像的先决条件、限制和建议
AlwaysOn 可用性组概述 (SQL Server)
关于日志传送 (SQL Server)