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

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

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

不会。完整恢复模式下,正常事务日志备份(BACKUP LOG)可使满足条件的非活动日志空间可复用,但备份并不保证立即截断。完整备份和差异备份都不截断日志——这是完整恢复模式的设计核心:保留完整日志链以支持时间点恢复。

机制解释

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

  • 完整备份:备份数据文件 + 少量日志(保证备份一致),日志文件不截断;
  • 日志备份:备份自上次日志备份以来的日志记录,完成后可截断满足条件的非活动VLF;活动事务、复制/可用组等log_reuse_wait条件仍可能阻止截断,COPY_ONLY日志备份也不负责截断。

如果只做完整备份而不做日志备份,事务日志可能持续增长到配置上限或磁盘耗尽,直到占满磁盘导致数据库报错(9002)。

正确的备份策略

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

-- 示例频率;实际间隔按RPO与日志增长设置
BACKUP LOG MyDB TO DISK = 'D:\backup\MyDB_log.trn';

日志已经撑爆的紧急处理

-- 先查log_reuse_wait_desc并处理原因,完成需要的日志备份
BACKUP LOG MyDB TO DISK = 'D:\backup\MyDB_log.trn';
-- 仅确认曾异常增长且长期不需该空间时,可选收缩(目标MB,不保证达到):
-- DBCC SHRINKFILE (N'MyDB_log', 10240);

截断只让日志内部空间可复用,不会缩小物理文件;日常反复收缩会导致再次增长。完整恢复日志链还需初始数据备份建立。

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

常见问题(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;

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台