You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置并验证变更数据捕获(CDC)的保留值?

嘿,这个问题我门儿清!变更数据捕获(CDC)的保留值就是用来控制CDC日志数据被自动清理的时长,默认的4320分钟其实就是3天。下面给你一步步说怎么修改和验证这个设置:

修改CDC保留值

针对已启用CDC的数据库

如果你的数据库已经开启了CDC,直接用系统存储过程修改清理作业的保留参数就行:

  1. 执行以下SQL修改保留时长(这里示例改成10080分钟,也就是7天,你可以换成自己需要的数值):
EXEC sys.sp_cdc_change_job 
    @job_type = N'cleanup',
    @retention = 10080;
  1. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:27:05