SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为:
在执行增删改语句(产生事务日志)的过程中提示,The transaction log for database '***' is full due to 'REPLICATION'(数据库“***”的事务日志已满,原因为“REPLICATION”).
CDC以及复制的基本原理粗略地讲,对于日志的使用步骤如下:
1,每当基础表(开启了CDC或者replication的表)产生事务性操作(增删改)之后,对应的事务日志写入日志文件,
2,此时的日志被状态被标记为Replication,也即处于待复制状态,这个活动状态跟数据库的还原模式无关,即便是简单还原模式,
3,然后有后台进程来读取这个日志,根据事务日志的内存写入目标表,
这个目标对于cdc来说是记录数据变化的系统表,
对于replication来说是写入distribution这个库
4,步骤3完成之后,事务日志被标记为正常状态,如果是简单还原模式,被后台进程解析过的事务日志被截断,可以重用
如果上述中间的第三个步骤出现问题,也即后台进程无法解析日志后释放可用的日志空间,再次往数据库中写入操作,就会出现:数据库“TestDB”的事务日志已满,原因为“REPLICATION”的情况
本文通过通过演示开启CDC的情况下日志空间被占满的现象,以及对应的处理办法
测试环境搭建
首先建立一个测试数据库,
USE masterGOCREATE DATABASE TestLogFull ON PRIMARY ( NAME =&nbs