mysql 日志cdc_SQLServer数据库中开启CDC导致事务日志空间被占满的原因

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 master

GO

CREATE DATABASE TestLogFull ON PRIMARY

(

NAME = N'TestLogFull',

FILENAME = N'D:\DBFile\TestLogFull\TestLogFull.mdf' ,

SIZE = 500MB ,

MAXSIZE = UNLIMITED,

FILEGROWTH = 100MB

)

LOG ON

(

NAME = N'TestLogFull_log',

FILENAME = N'D:\DBFile\TestLogFull\TestLogFull_Log.ldf' ,

SIZE = 1MB ,

MAXSIZE = 512MB

)

这里指定日志文件的最大为512M,主要是为了演示日志空间被占满的现象

接着开启新建一个表同时开启CDC来测试

USE TestLogFull

--启用CDC

EXECUTE sys.sp_cdc_enable_db;

GO

--创建一张测试表

create table test_cdc

(

id int identit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值