【问题标题】:How to change the retention period for CDC or put a condition on it (SQL Server 2012)如何更改 CDC 的保留期或为其设置条件 (SQL Server 2012)
【发布时间】:2015-05-04 12:08:47
【问题描述】:

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

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

另外,有没有办法防止 CDC 完全删除过期记录?意思是,有没有办法实现一个标志,防止 CDC 删除任何记录,除非该记录已经被转移/移动。

非常感谢!

【问题讨论】:

    标签: sql-server cdc change-tracking change-data-capture


    【解决方案1】:

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

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

    【讨论】:

    • 您好,感谢您的出色参考。但是只有一个问题:“sys.sp_cdc_change_job”似乎没有在表名上使用参数。那么,是不是意味着保留期只能在数据库级别设置呢?
    • 另外,如果你恰好是疾控中心专家,请你也看看我的另一个问题吗?那真是太棒了,我会非常感激:stackoverflow.com/questions/29898661/…
    • 没错 - 清理作业已配置并在数据库(而不是表)级别运行。同样,在典型的 CDC 工作流程中,您通常会在特定时间点使整个数据仓库保持最新状态(而不是不同的表在不同的时间点)。
    • 再次感谢。只是一个很小的问题:在“sys.sp_cdc_change_job”中有两种工作类型(“捕获”和“清理”)。捕获,我假设只处理记录更改,而“清理”只处理删除“过期”数据。那么,在“捕获”的上下文中,“保留期”是什么意思?我使用了这个:“SELECT [retention]-- / 60 / 24 AS [Retention_In_Days] FROM msdb.dbo.cdc_jobs WHERE job_type = N'capture'”..我得到“0”。我不确定这可能意味着什么。非常感谢!
    • 对不起,没关系。我是盲人:它明确指出:“保留仅对清理工作有效。”。我很抱歉错过了这个。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多