SQL Server 复制残留 LSN 导致日志无法收缩

发布时间:2026/7/23 14:17:40
SQL Server 复制残留 LSN 导致日志无法收缩 什么是LSNLSNLog Sequence Number日志序列号是SQL Server事务日志唯一且递增的编号用来区分事务的先后顺序备份恢复时依靠它标记备份节点、确定恢复区间数据同步、CDC 及事务复制场景中则用它精准定位增量变更日志且数据库仅能截断最早活跃事务 LSN 之前的日志。什么是复制残留LSN为什么会导致复制残留复制残留 LSN是 SQL Server 事务复制 / CDC 功能留下的长期未被清理的事务日志保留标记会强制数据库一直保留某个 LSN 之前的日志导致日志文件无法自动截断、持续膨胀。可能是因为删除复制 / CDC 发布、订阅或作业但没有按流程彻底清理元数据导致LSN 标记仍存在以CDC为例删除或禁用cdc capture 作业但是未执行sp_cdc_disable_db,可能会导致复制残留。什么是CDC怎么判断是不是 CDC 残留?Change Data Capture变更数据捕获用来自动捕获数据库表的增、删、改操作并把这些变更记录存到专门的系统表中不会影响原表的业务性能。开启 CDC 后SQL Agent 会有一个捕获作业不停扫描事务日志把捕获的变更写到系统表cdc.dbo_xxx_CT 中。-- 1. 查数据库是否开启过 CDC SELECT name, is_cdc_enabled, log_reuse_wait_desc FROM sys.databases WHERE nameDB1; -- 2. 查 CDC 作业SQL Agent有没有 cdc.DB1_capture /_cleanup -- 3. 查残留 LSN关键最早的非分布式 LSN,就是CDC/复制残留 DBCC OPENTRAN;如何解决复制残留1、前置检查USE master; GO -- 查看数据库复制状态is_published/is_subscribed 发布状态/订阅状态 SELECT name,is_published,is_subscribed FROM sys.databases WHERE nameDB1; -- 查看残留复制事务LSN USE DB1; GO DBCC OPENTRAN; GO2、强制清理复制元数据USE master; GO -- 强制移除发布/复制配置 EXEC sp_removedbreplication dbname DB1, type Npublish, force 1; GO3、重置复制 LSN 标记注意切换SINGLE_USER WITH ROLLBACK IMMEDIATE会强制断开所有业务连接导致业务中断、必须维护窗口、操作前完整备份。USE DB1; GO -- 切单用户立刻回滚所有连接 ALTER DATABASE DB1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO -- 清空复制事务标记、解除日志锁定 EXEC sp_repldone xactid NULL, xact_segno NULL, numtrans 0, time 0, reset 1; GO -- 手动检查点截断日志 CHECKPOINT; GO -- 恢复多用户模式 ALTER DATABASE DB1 SET MULTI_USER; GO4、验证 LSN 是否清除USE DB1; GO DBCC OPENTRAN; GO5、收缩事务日志SQL SERVER 数据库日志文件收缩_sqlserver收缩日志文件-CSDN博客

相关新闻

最新新闻

日新闻

周新闻

月新闻