还原与恢复概述 (SQL Server)

适用于:SQL Server (所有受支持的版本)

若要从故障中恢复 SQL Server 数据库,数据库管理员必须按照逻辑正确并且有意义的还原顺序还原一组 SQL Server 备份。 SQL Server 还原和恢复支持从整个数据库、数据文件或数据页的备份还原数据,如下所示:

  • 数据库(“数据库完整还原” )

    还原和恢复整个数据库,并且数据库在还原和恢复操作期间处于脱机状态。

  • 数据文件(“文件还原” )

    还原和恢复一个数据文件或一组文件。 在文件还原过程中,包含相应文件的文件组在还原过程中自动变为脱机状态。 访问脱机文件组的任何尝试都会导致错误。

  • 数据页(“页面还原” )

    在完整恢复模式或大容量日志恢复模式下,可以还原单个页面。 可以对任何数据库执行页面还原,而不管文件组数为多少。

SQL Server 备份和还原对所有支持的操作系统都有效。 有关支持的操作系统的信息,请参阅 安装 SQL Server 2016 的硬件和软件要求。 有关支持从 SQL Server 的早期版本进行备份的信息,请参阅 RESTORE (Transact-SQL)中的“兼容性支持”部分。

还原方案概述

中的“还原方案SQL Server ”是从一个或多个备份还原数据、继而恢复数据库的过程。 支持的还原方案取决于数据库的恢复模式和 SQL Server的版本。

下表介绍了不同恢复模式所支持的可行还原方案。

还原方案 在简单恢复模式下 在完整/大容量日志恢复模式下
数据库完整还原 这是基本的还原策略。 数据库完整还原可能涉及完整数据库备份的简单还原和恢复。 另外,完整的数据库还原还可能涉及还原完整数据库备份,以及还原和恢复差异备份。

有关详细信息,请参阅完整数据库还原(简单恢复模式)
这是基本的还原策略。 数据库完整还原涉及还原完整数据库备份或差异备份(如果有),以及还原所有后续日志备份(按顺序)。 通过恢复并还原上一次日志备份 (RESTORE WITH RECOVERY) 完成数据库完整还原。

有关详细信息,请参阅完整数据库还原(完全恢复模式)
文件还原 * 还原损坏的只读文件,但不还原整个数据库。 仅在数据库至少有一个只读文件组时才可以进行文件还原。 还原一个或多个文件,而不还原整个数据库。 可以在数据库处于脱机状态时执行文件还原,对于 SQL Server的某些版本,也可以在数据库仍处于联机状态时执行。 在文件还原过程中,包含正在还原的文件的文件组一直处于脱机状态。
页面还原 不适用 还原损坏的页面。 可以在数据库处于脱机状态时执行页面还原,对于 SQL Server的某些版本,也可以在数据库仍处于联机状态时执行。 在页面还原过程中,正在还原的页面一直处于脱机状态。

必须具有完整的日志备份链(包含当前日志文件),并且必须应用所有这些日志备份以使页面与当前日志文件保持一致。

有关详细信息,请参阅还原页 (SQL Server)
段落还原 * 按文件组级别并从主文件组和所有读写辅助文件组开始,分阶段还原和恢复数据库。 按文件组级别并从主文件组开始,分阶段还原和恢复数据库。

有关详细信息,请参阅段落还原 (SQL Server)

* 仅在 Enterprise Edition 中支持联机还原。

还原数据库的步骤

若要执行文件还原,数据库引擎 执行两个步骤:

  • 创建所有丢失的数据库文件。

  • 将数据从备份设备复制到数据库文件。

若要执行数据库还原,数据库引擎 执行三个步骤:

  • 创建数据库和事务日志文件(如果它们不存在)。

  • 从数据库的备份介质将所有数据、日志和索引页复制到数据库文件中。

  • 在所谓的恢复过程中应用事务日志。

无论以何种方式还原数据,在恢复数据库前, SQL Server 数据库引擎 都会保证整个数据库在逻辑上的一致性。 例如,若要还原一个文件,则必须将该文件前滚足够长度,以便与数据库保持一致,才能恢复该文件并使其联机。

文件还原或页面还原的优点

只还原和恢复个别文件或页面(而非整个数据库)的方法具有以下优点:

  • 还原少量数据可以缩短复制和恢复数据的时间。

  • 在 SQL Server 中,还原文件或页面的操作可能会允许数据库中的其他数据在还原操作期间仍保持联机状态。

恢复和事务日志

对于大多数还原方案,需要应用事务日志备份并允许 SQL Server 数据库引擎 运行恢复过程 才能使数据库联机。 恢复是 SQL Server 用于让每个数据库以事务一致状态或干净状态启动的进程。

如果故障转移或其他非干净关闭,数据库可能处于这样的状态:某些修改从未从缓冲区缓存写入数据文件,且在数据文件内可能有未完成事务所做的某些修改。 当 SQL Server 的实例启动时,将根据最后一个数据库检查点运行每个数据库的恢复,其中包含三个阶段:

  • “分析阶段” 分析事务日志以确定最后一个检查点,并创建脏页表 (DPT) 和活动事务表 (ATT)。 DPT 包含在数据库关闭时处于脏状态的页面的记录。 ATT 包含在数据库未正常关闭时处于活动状态的事务的记录。

  • “重做阶段” 前滚日志中记录的且在数据库关闭时可能尚未写入数据文件的每个修改。 成功进行数据库范围内恢复所需的最小日志序列号 (minLSN) 在 DPT 中找到,并标记了所有脏页上所需的重做操作的开始时间。 在此阶段中,SQL Server 数据库引擎 会将属于提交的事务的所有脏页写入磁盘。

  • “撤消阶段” 回滚 ATT 中找到的未完成的事务,以确保数据库的完整性。 回滚后,数据库将进入联机状态,不能再将其他事务日志备份应用到数据库。

有关每个数据库恢复阶段的进度的信息记录在 SQL Server 错误日志中。 还可以使用扩展事件跟踪数据库恢复进度。 有关详细信息,请参阅博客文章数据库恢复进度的新扩展事件

注意

对于段落还原方案,如果在文件备份创建之前,只读文件组就已处于只读状态,则该文件组无需应用日志备份,并且文件还原会跳过日志备份的应用过程。

注意

若要在最大程度上使用企业环境中的数据库,SQL Server Enterprise Edition 可以在重做阶段后使数据库联机,而撤消阶段仍在执行。 这称为“快速恢复”。

恢复模式和支持的还原操作

可用于数据库的还原操作取决于所用的恢复模式。 下表简要说明了每种恢复模式是否支持给定的还原方案以及适用范围。

还原操作 完整恢复模式 大容量日志恢复模式 简单恢复模式
数据恢复 完整还原(如果日志可用)。 某些数据将丢失。 自上次完整备份或差异备份后的任何数据将丢失。
时点还原 日志备份所涵盖的任何时间。 日志备份包含任何大容量日志更改时不允许。 不支持。
文件还原 * 完全支持。 不完全支持。** 仅对只读辅助文件可用。
页面还原 * 完全支持。 不完全支持。** 无。
段落(文件组级)还原 * 完全支持。 不完全支持。** 仅对只读辅助文件可用。

* 在 SQL Server

** 对于所需条件,请参阅本主题后面的 简单恢复模式下的还原限制

重要

无论数据库的恢复模式如何,SQL Server 备份都无法还原到早于创建该备份的版本的 SQL Server 数据库引擎 版本。

简单恢复模式下的还原方案

简单恢复模式对还原操作有下列限制:

如果这些限制中有任何不适合于恢复要求的内容,我们建议您考虑使用完整恢复模式。 有关详细信息,请参阅备份概述 (SQL Server)

重要

无论数据库的恢复模式如何, SQL Server 备份都无法从早于创建该备份的版本的 SQL Server 版本还原。

在大容量日志恢复模式下进行还原

本节讨论特定于大容量日志恢复模式的还原注意事项,大容量日志恢复模式专门用于补充完整恢复模式。

注意

有关大容量日志恢复模式的介绍,请参阅事务日志 (SQL Server)

通常,大容量日志恢复模式与完整恢复模式相似,针对完整恢复模式的说明信息对两者都适用。 但是,大容量日志恢复模式对时点恢复和联机还原存在影响。

对时点恢复的限制

如果在大容量恢复模式下执行的日志备份包含大容量日志更改,则不允许时点恢复。 试图对包含大容量更改的日志备份执行时点恢复将导致还原操作失败。

对联机还原的限制

仅在满足下列条件时,联机还原顺序才有效:

  • 在启动还原顺序之前必须执行所有必要的日志备份。

  • 在启动联机还原顺序之前必须备份大容量更改。

  • 如果数据库中存在大容量更改,则所有文件必须处于联机或失效状态。 (这意味着它不再是数据库的一部分。)

如果这些条件不满足,则联机还原顺序失败。

注意

建议在启动联机还原之前切换为完整恢复模式。 有关详细信息,请参阅恢复模式 (SQL Server)

有关如何执行联机还原的信息,请参阅联机还原 (SQL Server)

数据库恢复顾问 (SQL Server Management Studio)

数据库恢复顾问简化了制定还原计划的过程,可以很轻松地实现最优的正确还原顺序。 很多已知数据库还原问题和客户所要求的增强功能已得到解决。 数据库恢复顾问引入的主要增强功能包括:

  • 还原计划算法:用于制定还原计划的算法已得到明显改进,特别是对于复杂的还原场景。 对于许多边缘案例(包括时点还原中存在分支的情形),处理效率要比以前版本的 SQL Server更高。

  • 时间点还原:数据库恢复顾问极大地简化了将数据库还原到给定时间点的过程。 可视备份时间线明显增强了对时点还原的支持。 此可视时间线允许您将合适的时点标识为还原数据库的目标恢复点。 时间线简化了遍历有分支恢复路径(跨恢复分支的路径)的过程。 给定时点还原计划自动包括与还原到目标时点(日期和时间)相关的备份。 有关详细信息,请参阅将 SQL Server 数据库还原到某个时间点(完整恢复模式)

有关详细信息,请参阅下列 SQL Server 可管理性博客中有关数据库恢复顾问的信息:

加速数据库恢复

SQL Server 2019 (15.x) 和 Azure SQL 数据库中开始提供加速数据库恢复。 通过重新设计 SQL Server 数据库引擎 恢复过程,加速数据库恢复极大地提高了数据库可用性,尤其是存在长时间运行的事务时。 启用了加速数据库恢复的数据库在故障转移或其他非干净关闭后完成恢复过程的速度显著加快。 启用加速数据库恢复后,回滚取消长时间运行的事务的速度也显著加快。

可使用以下语法对 SQL Server 2019 (15.x) 按数据库启用加速数据库恢复:

ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON;

注意

Azure SQL 数据库 上将默认启用加速数据库恢复。

另请参阅

Backup Overview (SQL Server)
事务日志 (SQL Server)
SQL Server 事务日志体系结构和管理指南
SQL Server 数据库的备份和还原
应用事务日志备份 (SQL Server)