首页/数据/备份与容灾速查/SQL Server 日志备份与结尾日志
数据库与云备份56 条

SQL Server 日志备份与结尾日志

完整恢复模型下的事务日志备份把 RPO 压到分钟级;故障切换前先备份结尾日志(tail-log),才能保住尚未入备份的近期事务。

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

SQL Server 日志备份是什么

完整恢复模型下,事务日志记录每一次已提交变更,日志备份把这些记录搬出数据库文件。有了连续的全量 + 日志链,就能把库还原到日志覆盖范围内的任意时间点,RPO 由日志备份频率决定,常见节奏是 5 到 15 分钟。数据库损坏时还要抢在日志文件消失前做一次结尾日志备份,否则最近几个小时的事务无法找回。

基本信息

适用平台SQL Server 各版本(完整恢复模型或大容量日志恢复模型)
前提数据库处于 FULL 或 BULK_LOGGED 恢复模型,且日志链完整未断
结尾日志备份数据库在线时用 WITH NORECOVERY;数据文件损坏但日志仍可访问时用 WITH NO_TRUNCATE
权限要求BACKUP DATABASE / BACKUP LOG 权限,或 db_owner、sysadmin 角色
频率设定按 RPO 定;频率越高丢失窗口越小,但备份文件与 IO 开销越多

典型使用场景

  • 误删数据的时间点恢复:全量 + 日志还原到删除动作前的时刻
  • 分钟级 RPO 要求:高频日志备份把可丢失数据压缩到几分钟
  • 灾难前的最后抢救:磁盘故障后先备份结尾日志,保住未入备份的事务
  • 日志空间治理:定期日志备份本身会截断可截断部分,防止日志文件膨胀
  • 日志传送与 Always On:日志备份是日志传送与部分同步方案的基础

日志备份与结尾日志

日志备份与结尾日志
# 确认恢复模型:SIMPLE 模型无法做日志备份
ALTER DATABASE [AppDB] SET RECOVERY FULL;
# 常规日志备份,INIT 覆盖文件、COMPRESSION 省空间
BACKUP LOG [AppDB] TO DISK = N'D:\backup\AppDB-log.trn' WITH INIT, COMPRESSION;
# 灾难前保住结尾日志(数据库仍在线)
BACKUP LOG [AppDB] TO DISK = N'D:\backup\AppDB-tail.trn' WITH NORECOVERY;
# 数据文件损坏但仍能访问日志时用 NO_TRUNCATE
BACKUP LOG [AppDB] TO DISK = N'D:\backup\AppDB-tail2.trn' WITH NO_TRUNCATE;
# 查看各库最近的备份与恢复模型
SELECT name, recovery_model_desc, log_reuse_wait_desc FROM sys.databases;

恢复模型对照

恢复模型能否日志备份时间点恢复
FULL可以支持,需全量 + 日志链完整
BULK_LOGGED可以支持,但含大容量操作的日志可能最小化记录
SIMPLE不可以不支持,日志在检查点后被自动截断
日志链一旦中断(例如中途切换恢复模型、或用备份覆盖还原数据库),需要重新做一次全量或差异备份重开链条,后续日志备份才能在还原时衔接。
SIMPLE 恢复模型的库无法做日志备份;把生产库设为 SIMPLE 就等于放弃时间点恢复能力,变更前应确认业务是否接受只恢复到最近一次全量。

易错点

  • 日志备份长期不执行:日志文件持续增长占满磁盘,是 SQL Server 上最常见的运维事故之一
  • 中途把恢复模型切成 SIMPLE:日志被截断,链条断裂,时间点恢复能力直接归零
  • 灾难时忘记做结尾日志备份:直接开始还原全量,最近若干小时已提交事务永久丢失
  • 不做日志备份却用完整恢复模型:日志无限制增长,同时也没有可用的时间点恢复能力

数据来源与参考

  • Microsoft Learn(BACKUP LOG / 恢复模型)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌