碎片还原 (SQL Server)

本主题仅适用于包含多个文件或文件组的 SQL Server 企业版中的数据库;并且,在简单模型中,仅适用于只读文件组。

有关段落还原和内存优化表的信息,请参阅 包含 Memory-Optimized 表的数据库段落还原

段落还原 允许分阶段还原和恢复包含多个文件组的数据库。 片段还原涉及一系列还原序列,从主文件组开始,在某些情况下,还有一个或多个辅助文件组。 分段恢复保持检查,以确保最终数据库的一致性。 还原序列完成后,如果恢复的文件有效且与数据库一致,可以直接联机。

分段还原适用于所有恢复模式,但对完整恢复模式和大容量日志恢复模式而言,比简单模式更加灵活。

每个段落还原都以名为 分部还原序列的初始还原序列开始。 最小情况下,部分还原顺序将还原和恢复主文件组,并在简单恢复模式下恢复所有读/写文件组。 在片段还原序列中,整个数据库必须脱机。 此后,数据库处于联机状态,并且还原的文件组可用。 但是,任何未存储的文件组都保持脱机状态,不可访问。 但是,任何脱机的文件组都可以通过文件还原进行恢复并联机。

无论数据库使用的恢复模式如何,分部还原序列都以 RESTORE DATABASE 语句开头,该语句还原完整备份并指定 PARTIAL 选项。 PARTIAL 选项始终启动新的段落还原;因此,必须在分部还原序列的初始语句中只指定 PARTIAL 一次。 当部分还原序列完成并且数据库处于联机状态时,剩余文件的状态将变为“恢复挂起”,因为它们的恢复已被延迟。

随后,段落还原通常包括一个或多个还原序列,这些序列称为 文件组还原序列。 可以根据需要等待执行特定的文件组还原序列。 每个文件组还原序列还原并将一个或多个脱机文件组恢复到与数据库一致的点。 文件组还原序列的计时和数量取决于恢复目标、要还原的脱机文件组数,以及每个文件组还原序列的还原数量。

执行逐段还原的确切要求取决于数据库的恢复模式。 有关详细信息,请参阅本主题后面的“简单恢复模式下的段落还原”和“完全恢复模式下的段落还原”。

碎片还原方案

所有版本的 SQL Server 都支持脱机分片还原。 在企业版中,分块还原可以是联机还原,也可以是脱机还原。 离线和在线分块还原的影响如下:

  • 脱机逐步还原方案

    在脱机分片还原中,数据库在部分还原序列后处于联机状态。 尚未还原的文件组保持脱机状态,但在使数据库脱机后,可以根据需要还原这些文件组。

  • 联机零碎还原场景

    在联机段落还原中,在部分还原序列之后,数据库处于联机状态,主文件组和所有恢复的辅助文件组都可用。 尚未还原的文件组保持脱机状态,但在数据库保持联机状态时,可以根据需要还原它们。

    在线碎片还原可能涉及延迟的事务。 仅还原文件组的子集时,依赖于联机文件组的数据库中的事务可能会延迟。 这是典型的,因为整个数据库必须一致。 有关详细信息,请参阅延迟事务(SQL Server)。

  • SQL Server In-Memory OLTP 逐步还原方案

    有关 In-Memory OLTP 数据库的段落还原的信息,请参阅 包含 Memory-Optimized 表的数据库的段落备份和还原

限制

如果部分还原序列排除任何 FILESTREAM 文件组,则不支持时间点还原。 可以强制还原序列继续。 但是,永远无法还原从 RESTORE 语句中省略的 FILESTREAM 文件组。 若要强制时间点还原,请指定 CONTINUE_AFTER_ERROR 选项,并与 STOPAT、STOPATMARK 或 STOPBEFOREMARK 选项一起使用;在后续 RESTORE LOG 语句中,您还必须指定这些选项。 如果指定CONTINUE_AFTER_ERROR,部分还原序列会成功,FILESTREAM 文件组将无法恢复。

简单恢复模式下的逐步恢复

在简单恢复模型下,逐步还原过程必须以完整数据库或部分备份开始。 然后,如果还原的备份是差异基础,则接下来还原最新的差异备份。

在第一个部分还原序列中,如果仅还原一部分读/写文件组,则恢复部分还原的数据库时,任何未存储的文件组将失效。 仅在以下情况下,省略部分还原序列中的读/写文件组才适用:

  • 你打算让未存储的文件组失效。

  • 还原序列将到达恢复点,其中每个未还原的文件组已变为只读、已删除或已失效(在部分还原序列的之前的一次还原过程中)。

  • 数据库使用简单恢复模式时执行完整备份,但恢复点是在数据库使用完整恢复模式的时候。 有关更多信息,请参阅本主题之后的“恢复模型已从简单切换到完整的数据库的逐步还原”。

简单恢复模式下的片段还原要求

在简单恢复模式下,初始阶段将还原并恢复主文件组和所有读/写辅助文件组。 完成初始阶段后,恢复的文件(如果它们有效且与数据库一致)可以直接联机。

此后,可以在一个或多个其他阶段还原只读文件组。

仅当以下条件满足时,零散还原才可用于只读辅助文件组:

  • 备份时是只读的。

  • 保持只读状态(以确保其在逻辑上与主文件组保持一致)。

若要执行逐步还原,必须遵循以下准则:

  • 简单恢复模型数据库的逐步还原的完整备份集需要包含以下内容:

    • 包含主文件组和备份时读取/写入的所有文件组的部分或完整数据库备份。

    • 每个只读文件的备份。

  • 要使只读文件的备份与主文件组保持一致,辅助文件组必须自被备份之时起至包含主文件组的备份完成时,一直保持为只读状态。 如果差异文件备份是在文件组变为只读之后进行的,则可以使用这些备份。

碎片还原阶段(简单恢复模式)

逐步还原方案涉及以下阶段:

  • 初始阶段(还原和恢复主文件组和所有读/写文件组)

    初始阶段进行部分还原。 部分还原序列将还原主文件组、所有读/写辅助文件组和(可选)某些只读文件组。 在初始阶段,整个数据库必须脱机。 在初始阶段之后,数据库处于联机状态,并且还原的文件组可用。 但是,任何尚未还原的只读文件组都保持脱机状态。

    初始阶段的第一个 RESTORE 语句必须执行以下操作:

    • 使用包含主文件组和备份时读取/写入的所有文件组的部分或完整数据库备份。 通常通过恢复部分备份来引导部分恢复流程。

    • 指定 PARTIAL 选项,该选项表示逐步还原的开始。

    注释

    PARTIAL 选项执行安全检查,确保生成的数据库适合用作生产数据库。

    • 如果备份是完整数据库备份,请指定READ_WRITE_FILEGROUPS选项。
  • 当数据库处于联机状态时,可以使用一个或多个联机文件还原来还原和恢复在备份时处于脱机状态的只读文件。 联机文件还原的时间取决于你想要联机数据的时间。

    是否必须将数据还原到文件取决于以下内容:

    • 可以直接通过恢复与数据库一致的有效只读文件而使其联机,而无需还原任何数据。

    • 在恢复之前,必须还原损坏或与数据库不一致的文件。

例子

完全恢复模式下的段落还原

在完整恢复模式或大容量日志恢复模式下,片段还原可用于包含多个文件组的任何数据库,并且可以将数据库还原到任何时间点。 碎片还原的还原序列如下所示:

  • 部分还原序列

    部分还原序列将还原主文件组,并选择性地还原某些辅助文件组。

    第一个 RESTORE DATABASE 语句必须执行以下作:

    • 指定 PARTIAL 选项。 这表示逐步恢复的开始。

    • 使用包含主文件组的任何完整数据库备份。 常见做法是通过还原部分备份来启动部分还原序列。

    • 若要还原到特定时间点,必须在部分还原序列中指定时间。 还原序列的每个后续步骤都必须指定相同的时间点。

  • 文件组还原序列将其他文件组联机到与数据库一致的点。

    在 Enterprise Edition 中,可以在数据库保持联机状态时还原和恢复任何脱机辅助文件组。 如果特定只读文件未损坏且与数据库一致,则无需还原该文件。 有关详细信息,请参阅恢复数据库而不还原数据 (Transact-SQL)

应用日志备份

如果从文件备份创建之前开始,只读文件组一直处于只读状态,那么就不需要将日志备份应用到该文件组,文件还原时会跳过该操作。 如果文件组是读/写的,则必须将未中断的日志备份链应用于最后一次完整还原或差异还原,以使文件组转发到当前日志文件。

例子

执行从简单恢复模式切换到完整恢复模式的数据库的部分还原

可以对切换自简单恢复模式到完整恢复模式且已有完整或部分数据库备份的数据库执行碎片还原。 例如,请考虑执行以下步骤的数据库:

  1. 创建简单模型数据库的部分备份(backup_1)。

  2. 一段时间后,将恢复模式更改为“完整恢复模式”。

  3. 创建差异备份。

  4. 开始进行日志备份。

此后,以下序列有效:

  1. 在部分还原过程中省略了一些次要文件组。

  2. 进行差异还原,然后执行其他所需的还原。

  3. 稍后,从backup_1部分备份中还原读/写辅助文件组 WITH NORECOVERY

  4. 在原始碎片还原序列中,还原差异备份以及其他备份,以确保数据恢复到原始恢复点。

另请参阅

应用事务日志备份 (SQL Server)
RESTORE (Transact-SQL)
将 SQL Server 数据库还原到时间点(完整恢复模式)
还原和恢复概述 (SQL Server)
规划和执行还原序列(完整恢复模式)