How the cdc retention value can be changed for the

2020-06-08 19:12发布

I'm implementing a logging feature on a asp.net mvc2 application, that uses SqlServer2008 as a database and Entity Framework as a data model.

I enabled CDC feature of SqlServer and it's logging changes well, but I just noticed that some of the old logging data is erased.

Does anyone know what's default period CDC keeps records, and does anyone know how could I set it to indefinite value.

3条回答
该账号已被封号
2楼-- · 2020-06-08 19:20

If you want to retain the CDC data indefinitly, you can simply disable the CDC cleanup job:

  1. Open SQL Server Management Studio and connect to your database server
  2. In the object explorer, expand “<instance> | SQL Server Agent | Jobs”
  3. Find the job for cleanup named “cdc.<database name>_cleanup”.
  4. Right-click the job and select "disable"

Here is a sample picture of where to find the option:

How to disable CDC Cleanup

After you disabled the cleanup job, the CDC data will no longer get removed after a certain time interval.

查看更多
smile是对你的礼貌
3楼-- · 2020-06-08 19:24

By default it deletes anything older than 3 days, to change the default value to 14 days use the following script

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
查看更多
走好不送
4楼-- · 2020-06-08 19:39

I just discovered that the default retention value is 4320 minutes = 72 hours = 3 days.

It should be configurable by using

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

The maximum value is 52494800 (100 years). If specified, the value must be a positive integer. Retention is valid only for cleanup jobs.

Here's the link to the more detail explanation of sp_cdc_change_job procedure

Hope this will help someone else, too :D.

查看更多
登录 后发表回答