跳到主要内容
系统常识 SQL Server时间点还原事务日志备份

怎么把数据库回滚到指定时间点

SQL Server 时间点还原的完整流程:完整备份 + 差异 + 日志链的还原顺序、STOPAT 参数用法,以及前提条件与常见失败原因。

发布于 2026/11/11 所属频道 SQL Server

结论先行

时间点还原的前提是完整恢复模型(或大容量日志模型)且日志备份链完整。流程是:最近完整备份(NORECOVERY)→ 最近差异(NORECOVERY)→ 逐个日志备份叠加,最后一个用 WITH STOPAT = '目标时间' 收口。只要日志链断了,能回到的就是断裂点之前。

操作步骤

-- 1. 完整备份(NORECOVERY 保持待恢复状态)
RESTORE DATABASE Sales FROM DISK = N'E:\backup\sales_full.bak' WITH NORECOVERY;
-- 2. 差异备份(可选,加快起点)
RESTORE DATABASE Sales FROM DISK = N'E:\backup\sales_diff.bak' WITH NORECOVERY;
-- 3. 逐段日志备份,最后一段指定停止点
RESTORE LOG Sales FROM DISK = N'E:\backup\sales_log_0900.trn' WITH NORECOVERY;
RESTORE LOG Sales FROM DISK = N'E:\backup\sales_log_0930.trn' WITH STOPAT = N'2026-11-11 09:25:00', RECOVERY;

STOPAT 也支持 STOPATMARK(指定日志标记)与 STOPBEFORETIME(恢复到标记之前),适合精确定位某条误操作事务。

前提条件与限制

  • 恢复模型必须是 FULL 或 BULK_LOGGED;简单模型下日志已自动截断,根本没有可叠加的日志链。
  • 日志备份必须时间线连续:漏一次日志备份,之后所有日志都用不上。
  • 备份必须来自同版本或更低版本的引擎,跨版本还原方向是单向的(低 → 高)。
  • 库须处于独占可访问状态,还原前断开所有连接。

常见失败原因速查

现象 根因
报「备份链不完整」 日志链缺段或顺序错
还原成功但没到目标时间 STOPAT 时间早于链起点,只能退到最近可用备份
权限不足 需数据库所有者或 sysadmin 角色

用 SSMS 管理工具条目 的还原向导也能图形化完成同样流程,勾选「在指定时间点还原数据库」后选时间。SQL Server 2022 Developer、SQL Server 产品族条目 各引擎行为一致。

相关链接

本文内容基于公开资料整理,仅供参考;涉及授权与合规的操作请以厂商官方文档为准。

相关推荐下载

按本文主题匹配的官方原版镜像条目

配套 PE 工具

制作启动盘、备份数据、修复引导

其他常识文章

同一集合内的相近主题,按标签与关键词匹配