如何设置并验证变更数据捕获(CDC)的保留值?
嘿,这个问题我门儿清!变更数据捕获(CDC)的保留值就是用来控制CDC日志数据被自动清理的时长,默认的4320分钟其实就是3天。下面给你一步步说怎么修改和验证这个设置:
修改CDC保留值
针对已启用CDC的数据库
如果你的数据库已经开启了CDC,直接用系统存储过程修改清理作业的保留参数就行:
- 执行以下SQL修改保留时长(这里示例改成10080分钟,也就是7天,你可以换成自己需要的数值):
EXEC sys.sp_cdc_change_job @job_type = N'cleanup', @retention = 10080;
- 重启CDC清理作业让设置生效:
EXEC sys.sp_cdc_stop_job @job_type = N'cleanup'; EXEC sys.sp_cdc_start_job @job_type = N'cleanup';
针对未启用CDC的数据库
如果还没给数据库开CDC,可以在启用的时候直接指定保留值:
-- 先启用数据库级CDC EXEC sys.sp_cdc_enable_db; -- 添加清理作业并设置保留时长 EXEC sys.sp_cdc_add_job @job_type = N'cleanup', @retention = 10080;
验证CDC保留值是否生效
有几种简单的方式可以确认设置是否成功:
- 查询系统视图直接查看参数
执行以下SQL,就能看到当前清理作业的保留分钟数:
SELECT job_id, job_type, retention AS 保留分钟数 FROM sys.cdc_jobs WHERE job_type = N'cleanup';
查看SQL Server代理作业属性
打开SQL Server代理,找到名称格式为cdc.<你的数据库名>_cleanup_job的作业,查看它的作业步骤,在步骤的命令参数里能看到@retention的当前值。验证数据实际保留情况
可以查询CDC捕获表(比如cdc.<表名>_CT)里的最早记录的__$start_lsn,通过sys.fn_cdc_map_lsn_to_time函数转换成时间,看是否符合你设置的保留时长:
SELECT MIN(sys.fn_cdc_map_lsn_to_time(__$start_lsn)) AS 最早保留的CDC记录时间 FROM cdc.YourTable_CT; -- 替换成你的CDC捕获表名
内容的提问来源于stack exchange,提问作者Marcius Nery
相关产品推荐
相关产品推荐

