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

Sql server 如何更改CDC的保留期或对其设置条件(SQL Server 2012),sql-server,cdc,change-tracking,change-data-capture,Sql Server,Cdc,Change Tracking,Change Data Capture,我在SQL Server 2012环境中,在表上启用了CDC。总之,该表用于填充数据仓库,基本上,该表的内容在其他地方重复 然而,我刚刚注意到,我们正在丢失大量数据,因为CDC是在默认设置为3天的情况下启用的。我知道如何编写查询来启用具有新的/不同保留期的CDC。但这不是任务,任务是我必须能够更改当前的CDC设置。那么,有没有办法改变保留期 此外,还有什么方法可以防止CDC从所有方面删除过期记录?也就是说,是否有一种方法可以实现一个标志,防止CDC删除任何记录,除非该记录已被传输/移动 多谢各位

我在SQL Server 2012环境中,在表上启用了CDC。总之,该表用于填充数据仓库,基本上,该表的内容在其他地方重复

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

此外,还有什么方法可以防止CDC从所有方面删除过期记录?也就是说,是否有一种方法可以实现一个标志,防止CDC删除任何记录,除非该记录已被传输/移动

多谢各位

是您希望更改保留的内容


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

具体来说,根据上面的答案,可以使用以下命令:

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

嗨,谢谢你的推荐。但只有一个问题:sys.sp_cdc_change_作业似乎没有在表名上使用参数。那么,这是否意味着只能在数据库级别设置保留期?另外,如果您碰巧是CDC专家,请您也看看我的另一个问题?这真是太棒了,我非常感谢:这是正确的-清理作业是在数据库而不是表级别配置和运行的。同样,在一个典型的CDC工作流中,您通常会在特定的时间点更新整个数据仓库,而不是在不同的时间点更新不同的表。再次感谢。只有一个非常小的问题:在sys.sp_cdc_change_作业中,有两种作业类型“捕获”和“清理”。捕获,我假设只处理记录更改,“清理”只处理删除过期数据。那么,在捕获上下文中,保留期意味着什么?我使用了这个:从msdb.dbo.cdc_jobs中选择[retention]-/60/24作为[retention_In_Days],其中job_type=N'capture'。。我得到了0分。我不知道那是什么意思。谢谢!对不起,没关系。我是瞎子:它清楚地表明:保留只对清理工作有效。。我很抱歉错过了这个。