首页/数据/备份与容灾速查/SQL Server 恢复链还原
数据库与云备份56 条

SQL Server 恢复链还原

按全量→差异→日志顺序还原:中间步骤用 WITH NORECOVERY 保持链可继续,最后一条 WITH RECOVERY 收尾;STOPAT 支持指定时间点。

备份与容灾速查数据更新于 2026-10-13

SQL Server 还原链是什么

SQL Server 的数据库还原不是『打开一个文件』,而是把全量备份、差异备份、事务日志备份按顺序依次应用,形成一条还原链。中间每一步都用 WITH NORECOVERY 让数据库停在还原态,最后一步才用 WITH RECOVERY 开放数据库;只要链条没断,就能把库还原到日志覆盖范围内的任意时间点(STOPAT)。

基本信息

适用平台SQL Server 2016 及以上(RESTORE 语法各版本基本一致)
前提库须为完整恢复模式,日志链未断才能做日志还原
权限sysadmin / dbcreator 服务器角色,或目标库 db_owner
关键选项NORECOVERY(保留还原态)、RECOVERY(开放库)、MOVE(重定向数据文件)、STOPAT(时间点)

典型使用场景

  • 误删数据后精确还原:用日志还原 + STOPAT 回到删除动作前一秒
  • 整库恢复:全量 + 差异 + 增量日志按顺序补齐到最近可用点
  • 还原验证:把备份还原成临时库名,检查数据后再决定是否切换
  • 跨实例迁移:用备份文件还原到另一台服务器,路径不同时靠 MOVE 重定向
  • 灾难恢复:磁盘损坏后用离线备份文件在备机重建数据库

还原前先读备份集内容

还原前先读备份集内容
# 查看备份文件里有哪些备份集、类型与 LSN 区间
RESTORE HEADERONLY FROM DISK = N'D:\backup\AppDB-full.bak';
# 取出逻辑文件名与原始路径,还原到新路径时要用 MOVE 重定向
RESTORE FILELISTONLY FROM DISK = N'D:\backup\AppDB-full.bak';
# 日志备份文件同理,先确认其 LSN 能与全量接上
RESTORE HEADERONLY FROM DISK = N'D:\backup\AppDB-log.trn';

完整链还原示例

完整链还原示例
# 全量与差异都保持在还原态,等待后续日志
RESTORE DATABASE [AppDB_restore] FROM DISK = N'D:\backup\AppDB-full.bak' WITH NORECOVERY,
  MOVE N'AppDB' TO N'D:\data\AppDB_restore.mdf',
  MOVE N'AppDB_log' TO N'D:\data\AppDB_restore_log.ldf';
RESTORE DATABASE [AppDB_restore] FROM DISK = N'D:\backup\AppDB-diff.bak' WITH NORECOVERY;
# 最后一条日志才开放数据库,并可指定时间点
RESTORE LOG [AppDB_restore] FROM DISK = N'D:\backup\AppDB-log.trn'
  WITH RECOVERY, STOPAT = N'2026-10-12T10:29:00';

HEADERONLY 输出读法

列含义正常/异常
BackupType备份类型:1 全量、5 差异、2 日志与文件名标注不符时说明文件被改过名
DatabaseName备份来源库名与目标库不一致时须用 MOVE/换名还原
FirstLSN / LastLSN该备份集的日志序列号区间区间接不上说明中间缺备份,链条已断
Position备份集在文件内的序号,还原时用 FILE = N 指定一个 .bak 里放多个备份集时要显式指定
中间步骤误写 WITH RECOVERY 会提前开放数据库并截断还原链,后续日志备份再无法应用;写脚本时把 RECOVERY 固定放在最后一条日志还原上。
STOPAT 只能落在备份日志覆盖的时间区间内,且要求日志序列完整;没有做过日志备份、或中途做过日志截断(如切换到简单恢复模式)的库,日志还原无法补齐。

易错点

  • 中间步骤误用 WITH RECOVERY:数据库提前开放,还原链截断,后续日志备份全部作废,只能从头重来
  • 完整恢复模式却从不做日志备份:日志链断裂,实际只能恢复到最近一次全量或差异的时间点
  • 备份文件的逻辑文件名与目标磁盘路径冲突又没用 MOVE:RESTORE 报错终止,还原停在中间态
  • 直接还原覆盖生产库:应先还原为临时库名做数据核对,确认无误后再改名或切换连接

数据来源与参考

  • Microsoft Learn(RESTORE 语句)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌