【问题标题】:How the cdc retention value can be changed for the cleanup job?如何为清理作业更改 cdc 保留值?
【发布时间】:2010-07-20 08:56:02
【问题描述】:

我正在一个 asp.net mvc2 应用程序上实现日志记录功能,它使用 SqlServer2008 作为数据库,使用实体框架作为数据模型。

我启用了 SqlServer 的 CDC 功能,它的日志记录变化很好,但我只是注意到一些旧的日志记录数据被删除了。

有谁知道 CDC 保存记录的默认期限是多少,有谁知道我如何将其设置为无限期值。

【问题讨论】:

    标签: sql-server database logging change-data-capture


    【解决方案1】:

    我刚刚发现默认保留值是 4320 分钟 = 72 小时 = 3 天。

    它应该可以通过使用来配置

    sp_cdc_change_job @job_type='cleanup', @retention=minutes
    

    最大值为 52494800(100 年)。如果指定,该值必须是正整数。保留仅对清理作业有效。

    这是 sp_cdc_change_job 过程的link to the more detail explanation

    希望这对其他人也有帮助:D。

    【讨论】:

    • 如何读取现有值?
    【解决方案2】:

    如果您想无限期保留CDC数据,您可以简单地disable the CDC cleanup job

    1. 打开 SQL Server Management Studio 并连接到您的数据库服务器
    2. 在对象资源管理器中,展开“ | SQL Server 代理 |工作”
    3. 查找名为“cdc._cleanup”的清理作业。
    4. 右键单击作业并选择“禁用”

    这是一个在哪里可以找到该选项的示例图片:

    在您禁用清理作业后,CDC 数据将在一定时间间隔后不再被删除。

    【讨论】:

    • 这种情况下Stop Job和Disable有什么区别?
    • 我的猜测:stop 会停止它,直到下一次服务器重新启动,disable 会永久停止它。
    • 感谢 Atticae 的回答。对 CDC 有疑问...我们可以为特定的 DML 操作启用 CDC - 仅用于更新吗?
    • @Mark13426 - “停止作业”停止当前正在运行的作业。它将保持启用状态,并在下一个预定时间再次运行。 “禁用”将阻止作业表单在其下一个预定时间运行。如果当前正在运行的作业被禁用,则当前运行将继续(当然,除非您还对其使用“停止作业”:-))。
    【解决方案3】:

    默认情况下,它会删除任何超过 3 天的内容,要将默认值更改为 14 天,请使用以下脚本

    use <Your database>
    go
    
    SELECT ([retention])/((60*24)) AS Default_Retention_days ,*
    FROM msdb.dbo.cdc_jobs
    go
    
    EXEC <Your database>.sys.sp_cdc_change_job 
    @job_type=N'Cleanup'
    ,@retention=20160 -- <60 min *24 hrs * 14 days >
    go
    
    SELECT ([retention])/((60*24)) AS Default_Retention_days ,*
    FROM msdb.dbo.cdc_jobs
    Go
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      相关资源
      最近更新 更多