还原和恢复概述 (SQL Server)
适用范围:SQL Server
本文概述了 SQL Server 的数据库还原和恢复过程。
概述
若要从故障中恢复 SQL Server 数据库,数据库管理员必须按照逻辑上正确且有意义的还原顺序来还原一组 SQL Server 备份。 SQL Server 还原和恢复过程支持从整个数据库的备份、数据文件或数据页还原数据,如下所示:
数据库(“数据库完整还原”)
还原和恢复整个数据库,并且数据库在还原和恢复操作期间处于脱机状态。
数据文件(“文件还原”)
还原和恢复一个数据文件或一组文件。 在文件还原过程中,包含相应文件的文件组在还原过程中将自动变为脱机状态。 访问脱机文件组的任何尝试都会导致错误。
数据页(“页面还原”)
在完整恢复模式或大容量日志恢复模式下,可以还原单个页面。 可以对任何数据库执行页面还原,而不管文件组数为多少。
SQL Server 备份和还原可跨所有受支持的操作系统进行。 有关支持的操作系统的信息,请参阅
还原方案
SQL Server 中的还原方案是从一个或多个备份还原数据、继而恢复数据库的过程。 支持的还原方案取决于数据库的恢复模式和 SQL Server 的版本。
下表介绍了不同恢复模式所支持的可行还原方案。
还原方案 | 在简单恢复模式下 | 在完整/大容量日志恢复模式下 |
---|---|---|
数据库完整还原 | 基本还原策略。 数据库完整还原可能涉及完整数据库备份的简单还原和恢复。 另外,完整的数据库还原还可能涉及还原完整数据库备份,以及还原和恢复差异备份。 有关详细信息,请参阅完整数据库还原(简单恢复模式)。 |
基本还原策略。 数据库完整还原涉及还原完整数据库备份或差异备份(如果有),以及还原所有后续日志备份(按顺序)。 通过恢复并还原上一次日志备份 (RESTORE WITH RECOVERY) 完成数据库完整还原。 有关详细信息,请参阅完整数据库还原(完全恢复模式) |
文件还原 1 | 还原损坏的只读文件,但不还原整个数据库。 仅在数据库至少有一个只读文件组时才可以进行文件还原。 | 还原一个或多个文件,而不还原整个数据库。 可以在数据库处于脱机状态时执行文件还原,对于某些 SQL Server 版本,也可以在数据库仍处于联机状态时执行。 在文件还原过程中,包含正在还原的文件的文件组一直处于脱机状态。 |
页面还原 | 不适用 | 还原损坏的页面。 可以在数据库处于脱机状态时执行页面还原,对于某些 SQL Server 版本,也可以在数据库仍处于联机状态时执行。 在页面还原过程中,正在还原的页面一直处于脱机状态。 必须具有完整的日志备份链(包含当前日志文件),并且必须应用所有这些日志备份以使页面与当前日志文件保持一致。 有关详细信息,请参阅还原页 (SQL Server)。 |
段落还原 1 | 按文件组级别并从主文件组和所有读写辅助文件组开始,分阶段还原和恢复数据库。 | 按文件组级别并从主文件组开始,分阶段还原和恢复数据库。 有关详细信息,请参阅段落还原 (SQL Server) |
1 仅在 Enterprise Edition 中支持联机还原。
还原数据库的步骤
若要执行文件还原,数据库引擎需要执行两个步骤:
创建所有缺失的数据库文件。
将数据从备份设备复制到数据库文件。
若要执行数据库还原,数据库引擎需要执行三个步骤:
创建数据库和事务日志文件(如果它们不存在)。
从数据库的备份介质将所有数据、日志和索引页复制到数据库文件中。
在所谓的恢复进程中应用事务日志。
无论以何种方式还原数据,在恢复数据库前,SQL Server 数据库引擎都需要保证整个数据库在逻辑上的一致性。 例如,如果还原文件,则无法恢复该文件并将其联机,直到它向前滚动到足以与数据库一致为止。
文件还原或页面还原的优点
只还原和恢复个别文件或页面(而非整个数据库)的方法具有以下优点:
还原少量数据可以缩短复制和恢复数据的时间。
在 SQL Server 中,还原文件或页面的操作可能会允许数据库中的其他数据在还原操作期间仍保持联机状态。
恢复和事务日志
对于大多数还原方案,需要应用事务日志备份并允许 SQL Server 数据库引擎运行恢复进程以使使数据库联机。 恢复是 SQL Server 用于使每个数据库以事务一致(或干净)状态启动的进程。
如果存在故障转移或其他非干净关闭,数据库可能处于这样的状态:某些修改从未从缓冲区缓存写入数据文件,且在数据文件内可能有未完成事务所做的某些修改。 SQL Server 实例启动时,会根据最后一个数据库检查点来运行每个数据库的恢复,其中包含三个阶段:
第 1 个阶段是分析阶段,该阶段将分析事务日志以确定最后一个检查点,并创建脏页表 (DPT) 和活动事务表 (ATT)。 DPT 包含在数据库关闭时处于脏状态的页面的记录。 ATT 包含在数据库未正常关闭时处于活动状态的事务的记录。
第 2 个阶段是重做阶段,该阶段将前滚日志中记录的且在数据库关闭时可能尚未写入数据文件的每个修改。 成功进行数据库范围内恢复所需的最小日志序列号 (minLSN) 在 DPT 中找到,并标记了所有脏页上所需的重做操作的开始时间。 在此阶段中,SQL Server 数据库引擎会将属于所提交事务的所有脏页写入磁盘。
第 3 个阶段是撤消阶段,该阶段将回滚在 ATT 中找到的未完成的事务,以确保数据库的完整性。 回滚后,数据库将进入联机状态,不能再将其他事务日志备份应用到数据库。
有关每个数据库恢复阶段的进度的信息将记录在 SQL Server 错误日志中。 还可以使用扩展事件跟踪数据库恢复进度。 有关详细信息,请参阅博客文章数据库恢复进度的新扩展事件。
注意
对于段落还原方案,如果在文件备份创建之前,只读文件组就已处于只读状态,则该文件组无需应用日志备份,并且文件还原会跳过日志备份的应用过程。
注意
若要在启动 SQL Server 服务后最大程度提高企业环境中数据库的可用性,例如在故障转移 Always On 故障转移群集实例或就地重启后,SQL Server Enterprise Edition 可以在重做阶段后使数据库联机,而撤消阶段仍在执行。 这称为“快速恢复”。 但是,当数据库处于联机状态但 SQL Server 服务尚未重新启动时,快速恢复不可用。 例如,执行 ALTER DATABASE AdventureWorks SET ONLINE;
将不允许数据库在恢复的所有三个阶段均已完成前处于读写状态。
恢复模式和支持的还原操作
可用于数据库的还原操作取决于所用的恢复模式。 下表简要说明了每种恢复模式是否支持给定的还原方案以及适用范围。
还原操作 | 完整恢复模式 | 大容量日志恢复模式 | 简单恢复模式 |
---|---|---|---|
数据恢复 | 完整还原(如果日志可用)。 | 某些数据将丢失。 | 自上次完整备份或差异备份后的任何数据将丢失。 |
时间点还原 | 日志备份所涵盖的任何时间。 | 日志备份包含任何大容量日志更改时不允许。 | 不支持。 |
文件还原 1 | 完全支持。 | 不完全支持。 2 | 仅对只读辅助文件可用。 |
页面还原 1 | 完全支持。 | 不完全支持。 2 | 无。 |
段落(文件组级)还原 1 | 完全支持。 | 不完全支持。 2 | 仅对只读辅助文件可用。 |
1 仅在 SQL Server Enterprise Edition 中可用
2 有关所需条件,请参阅本文后面的简单恢复模式下的还原限制。
重要
无论数据库的恢复模式如何,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)开始,加速数据库恢复(ADR) 可用。 ADR 也可在 Azure SQL 数据库、Azure SQL 托管实例、Azure Synapse Analytics(仅限专用 SQL 池)和 Microsoft Fabric 中的 SQL 数据库中使用。 通过重新设计 SQL Server 数据库引擎恢复进程,加速数据库恢复极大地提高了数据库可用性,尤其是存在长时间运行事务的情况下。 启用了 ADR 的数据库在故障转移或其他意外关闭后完成恢复过程的速度显著加快。 启用 ADR 后,已取消的长时间运行事务的回滚会立即完成。
可以使用以下语法,在 SQL Server 2019(15.x)及更高版本中为每个数据库启用 ADR:
ALTER DATABASE [<db_name>] SET ACCELERATED_DATABASE_RECOVERY = ON;
注意
ADR 始终在 Azure SQL 数据库、Azure SQL 托管实例、Azure Synapse Analytics(仅限专用 SQL 池)和 Microsoft Fabric 中的 SQL 数据库中启用。