执行文件还原(完整恢复模式)

更新日期: 2006 年 7 月 17 日

显示蓝色数据库磁盘的图标 本主题仅适用于完整恢复模式或大容量恢复模式下包含多个文件或文件组的数据库。

文件还原的目标是还原一个或多个损坏的文件,而不是还原整个数据库。SQL Server 的所有版本都支持在数据库处于离线状态时还原文件(“离线页面还原”**)。SQL Server 2005 Standard Edition、SQL Server 2005 Express Edition 和 SQL Server 2005 Workgroup Edition 仅支持离线还原,并且将文件还原至主文件组时始终要求数据库处于离线状态。如果数据库已经处于离线状态,则 SQL Server 2005 Enterprise Edition 使用离线还原。

在 SQL Server 2005 Enterprise Edition 中,如果文件还原过程中数据库处于在线状态,则数据库将保持在线状态。数据库处于在线状态时还原和恢复文件称为“在线文件还原”**。

这些文件还原方案如下:

  • 离线文件还原
    在离线文件还原中,还原已损坏的文件或文件组时,数据库处于离线状态。还原顺序结束时,数据库将在线。
  • 在线文件还原
    在 SQL Server 2005 Enterprise Edition 中,数据库处于在线状态时将自动执行在线文件还原。不过,任何文件组中如果有文件正在被还原,则该文件组处于离线状态。恢复离线文件组中的所有文件之后,该文件组将自动变为在线状态。有关在线还原的详细信息,请参阅执行在线还原
    ms190710.note(zh-cn,SQL.90).gif注意:
    只能查询或更新在线的文件组。尝试访问处于离线状态的文件组(包括其中包含正在还原或恢复的文件的文件组)会导致出现错误。

如果正在还原的文件组为读/写文件组,则在还原上一次数据备份或差异备份以后必须应用连续的日志备份链。这样才会使文件组记录到日志文件的当前活动日志记录中。恢复点通常靠近日志的末端,但并非总是如此。

如果正在还原的文件组为只读文件组,则通常不需要应用日志备份,并且会跳过该操作。如果在文件变成只读后进行了备份,则该备份为要还原的最后备份。前滚在目标点停止。

还原文件或文件组

从文件备份和差异文件备份中还原一个或多个受损文件

  1. 创建活动事务日志的尾日志备份。

    如果因为日志已损坏而无法执行此操作,则必须还原整个数据库。有关如何备份事务日志的信息,请参阅创建事务日志备份

    ms190710.note(zh-cn,SQL.90).gif重要提示:
    对于离线文件还原,在文件还原之前必须始终先进行一次尾日志备份。对于在线文件还原,在文件还原之后必须始终先进行一次日志备份。此日志备份对于将文件恢复到与数据库的其余部分一致的状态至关重要。
  2. 从每个损坏的文件的最新文件备份还原相应文件。

  3. 针对每个还原的文件,还原最近的差异文件备份(如果有)。

  4. 按顺序还原事务日志备份,从覆盖最早还原文件的备份开始,到在步骤 1 中创建的尾日志备份结束。

    必须还原在文件备份后创建的事务日志备份才能使数据库处于一致状态。事务日志备份可以快速前滚,因为仅应用了对还原文件所做的更改。与还原整个数据库相比,更好的方式是还原单个文件,因为并不会复制并随后前滚未损坏的文件。但是,仍需要读取整个日志备份链。

  5. 恢复数据库。

ms190710.note(zh-cn,SQL.90).gif注意:
文件备份可用于将数据库还原到早期时间点。必须还原一组完整的文件备份,然后依次将事务日志备份还原到目标点(目标点是结束最近还原的文件备份后的时间点),才能执行此操作。有关时点恢复的详细信息,请参阅将数据库还原到备份中的某个时间点

还原文件和文件组

高级主题

离线文件还原的 Transact-SQL 还原顺序(完整恢复模式)

文件还原方案由复制、前滚和恢复相应数据的单一还原顺序组成。

下列 Transact-SQL 代码显示了文件还原方案的还原顺序中的关键 RESTORE 选项。将省略与此目的不相关的语法和详细信息。

该示例说明了如何使用 NORECOVERY 离线还原两个辅助文件 AB。随后,对两个日志备份应用 NORECOVERY,然后是尾日志备份(用 RECOVERY 还原)。该示例从让文件离线开始,说明了离线文件还原的过程。

--Take the file offline.
ALTER DATABASE database_name MODIFY FILE SET OFFLINE
-- Back up the currently active transaction log.
BACKUP LOG database_name
   TO <tail_log_backup>
   WITH NORECOVERY
GO 
-- Restore the files.
RESTORE DATABASE database_name FILE=<name> 
   FROM <file_backup_of_file_A> 
   WITH NORECOVERY
RESTORE DATABASE database_name FILE=<name> ......
   FROM <file_backup_of_file_B> 
   WITH NORECOVERY
-- Restore the log backups.
RESTORE LOG database_name FROM <log_backup> 
   WITH NORECOVERY
RESTORE LOG database_name FROM <log_backup> 
   WITH NORECOVERY
RESTORE LOG database_name FROM <tail_log_backup> 
   WITH RECOVERY

示例

请参阅

概念

差异备份与新文件
在文件组上放置索引
差异文件备份
了解 SQL Server 中备份的还原和恢复工作方式
使用文件和文件组管理数据库增长
使用文件和文件组
应用事务日志备份
备份概述 (SQL Server)
SQL Server 中的还原与恢复概述

其他资源

设计文件和文件组
相关功能的备份和还原注意事项
RESTORE (Transact-SQL)
将数据库还原到备份中的某个时间点
使用 SQL Server 数据库还原顺序

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 7 月 17 日

更改的内容:
  • 合并了以前“完整恢复模式下的还原方案”主题中关于文件还原的介绍。