SQL Server 完整恢复模式下,完整备份会截断事务日志吗?

SQL Server 完整恢复模式下,完整备份不会截断事务日志——只有日志备份(BACKUP LOG)才会截断。日志不截断会持续增长。本文解释机制和管理方法。

最佳实践
SQL Server 完整恢复模式下,完整备份会截断事务日志吗?封面

不会。完整恢复模式下,只有事务日志备份**(BACKUP LOG)会截断日志的已备份部分。完整备份和差异备份都不截断日志——这是完整恢复模式的设计核心:保留完整日志链以支持时间点恢复。**

机制解释

完整恢复模式下事务日志被分为多个虚拟日志文件(VLF):

  • 完整备份:备份数据文件 + 少量日志(保证备份一致),日志文件不截断
  • 日志备份:备份自上次日志备份以来的日志记录,然后截断这些已备份的 VLF,空间可复用。

如果只做完整备份而不做日志备份,事务日志会无限增长,直到占满磁盘导致数据库报错(9002)。

正确的备份策略

-- 每天凌晨完整备份
BACKUP DATABASE MyDB TO DISK = 'D:\backup\MyDB_full.bak';

-- 每小时日志备份(截断日志的关键)
BACKUP LOG MyDB TO DISK = 'D:\backup\MyDB_log.trn';

日志已经撑爆的紧急处理

-- 1. 先做一次日志备份,再收缩
BACKUP LOG MyDB TO DISK = 'D:\backup\MyDB_log.trn';
DBCC SHRINKFILE (N'MyDB_log', 10240);   -- 收缩到 10GB

不推荐直接切简单模式截断——会打断日志链,丢失时间点恢复能力。

常见问题(FAQ)

Q:查看数据库的恢复模式?
A:SELECT name, recovery_model_desc FROM sys.databases;

Q:查看日志为什么没截断?
A:SELECT name, log_reuse_wait_desc FROM sys.databases;——LOG_BACKUP 表示等待日志备份。

Q:不需要时间点恢复的话?
A:把恢复模式改为 SIMPLE:日志在检查点后自动截断,管理简单,代价是只能恢复到备份点。ALTER DATABASE MyDB SET RECOVERY SIMPLE;

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台