本主题仅适用于在完整或大容量加载恢复模式下包含多个文件或文件组的数据库。
在文件还原中,目标是在不还原整个数据库的情况下还原一个或多个损坏的文件。 文件还原场景由单个还原序列组成,该序列复制、前滚和恢复相应的数据。
如果正在还原的文件组是读/写的,则必须在还原最后一个数据或差异备份后应用未中断的日志备份链。 这样会将文件组推进到日志文件中的当前活动日志记录。 恢复点通常接近日志的末尾,但不一定。
如果正在还原的文件组是只读的,则通常不需要应用日志备份,并且会被跳过。 如果在文件变为只读后进行备份,则这是要还原的最后一个备份。 向前移动至目标点停止。
文件还原方案如下所示:
脱机文件还原
在 脱机文件还原中,数据库在还原损坏的文件或文件组时处于脱机状态。 还原序列结束时,数据库上线。
SQL Server 2014 的所有版本都支持脱机文件还原。
联机文件还原
在 联机文件还原中,如果数据库在还原时处于联机状态,则会在文件还原期间保持联机状态。 但是,在还原作期间,正在还原文件的每个文件组处于脱机状态。 恢复脱机文件组中的所有文件后,文件组会自动联机。
有关支持联机页面和文件还原的信息,请参阅 SQL Server 2014 各版本支持的功能。 有关在线还原的详细信息,请参阅联机还原(SQL Server)。
小窍门
如果希望数据库脱机进行文件还原,请先使数据库脱机,然后再执行以下 ALTER DATABASE 语句启动还原序列:ALTER DATABASE database_name SET OFFLINE。
从文件备份还原损坏的文件
在还原一个或多个损坏的文件之前,请尝试创建 结尾日志备份。
如果日志已损坏,则无法创建结尾日志备份,并且必须还原整个数据库。
有关如何备份事务日志的信息,请参阅事务日志备份(SQL Server)。
重要
对于脱机文件还原,在文件还原之前,必须总是进行结尾日志备份。 对于联机文件还原,必须在文件还原后执行日志备份。 此日志备份是允许将文件恢复到与数据库其余部分一致的状态所必需的。
从该文件的最新文件备份还原每个损坏的文件。
还原每个被还原文件的差异文件备份(如果有),并确保为最新的版本。
按顺序还原事务日志备份,从涵盖已还原文件最早的备份开始,以步骤 1 中创建的结尾日志备份结束。
必须还原在文件备份后创建的事务日志备份,以使数据库处于一致状态。 事务日志备份可以快速前滚,因为只应用了针对还原文件的更改。 还原单个文件比还原整个数据库更好,因为未损坏的文件不会复制,然后向前滚动。 但是,仍必须读取整个日志备份链。
恢复数据库。
注释
文件备份可用于将数据库还原到较早的时间点。 为此,必须还原一组完整的文件备份,然后按顺序还原事务日志备份,以达到在最近还原的文件备份结束时的目标点。 有关时间点恢复的详细信息,请参阅将 SQL Server 数据库还原到时间点(完整恢复模式)。
Transact-SQL 离线文件恢复步骤(完整恢复模式)
文件还原方案由单个还原过程组成,该过程复制、前滚和恢复相应的数据。
本部分介绍文件还原序列的基本 RESTORE 选项。 省略与此目的无关的语法和详细信息。
以下的示例还原序列展示了使用 WITH NORECOVERY 对两个辅助文件A和B进行的脱机还原。 接下来,使用 NORECOVERY 应用两个日志备份,然后应用结尾日志备份,最后使用 WITH 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)
备份概述 (SQL Server)
还原和恢复概述 (SQL Server)
RESTORE (Transact-SQL)
完整数据库还原(简单恢复模式)
碎片还原 (SQL Server)