如何更改 CDC 的保留期或为其设置条件(SQL Server 2012)

How to change the retention period for CDC or put a condition on it (SQL Server 2012)

我在 SQL Server 2012 环境中,并且在 table 上启用了 CDC。总而言之,table 用于填充数据仓库(基本上,table 的内容在其他地方是重复的)。

但是,我刚刚注意到我们正在丢失大量数据,因为 CDC 启用了默认设置 3 天。 我知道如何编写查询以启用具有 NEW/DIFFERENT 保留期的 CDC。但这不是任务,任务是我必须能够更改当前的 CDC 设置。那么,有没有办法 ALTER 保留期?

另外,另外,总而言之,有什么办法可以防止CDC删除过期的记录吗?意思是,有没有办法实现一个标志,防止 CDC 删除任何记录,除非该记录已经 transferred/moved。

非常感谢!

sys.sp_cdc_change_job 是您要更改保留的内容。

关于你的第二个问题,CDC 无法知道你处理了哪些行,哪些行没有处理。因此,您必须设置保留期限,以便有足够的时间来处理自 ETL 作业上次 运行 以来积累的记录。使用 CDC 的典型工作流定期运行(例如每天、每周)。所以当你说你正在丢失数据时,我闻到了一些奇怪的味道(除非当前保留期设置为低于 ETL 运行之间的时间)。

具体可以使用如下命令(根据上面的回答):

EXECUTE sys.sp_cdc_change_job
  N'cleanup',
  @retention = RetentionTimeInMin --this is a number in minutes