Как можно изменить значение удержания cdc для задания очистки?

Я реализую функцию ведения журнала в приложении asp.net mvc2, которое использует SqlServer2008 в качестве базы данных и Entity Framework в качестве модели данных.

Я включил функцию CDC в SqlServer, и она хорошо регистрирует изменения, но я только что заметил, что некоторые старые данные регистрации стираются.

Кто-нибудь знает, какой период CDC по умолчанию хранит записи, и кто-нибудь знает, как я могу установить для него неопределенное значение.


person Eedoh    schedule 20.07.2010    source источник


Ответы (3)


Я только что обнаружил, что значение хранения по умолчанию составляет 4320 минут = 72 часа = 3 дня.

Он должен быть настроен с помощью

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

Максимальное значение 52494800 (100 лет). Если указано, значение должно быть положительным целым числом. Хранение допустимо только для заданий очистки.

Вот ссылка на более подробное объяснение процедуры sp_cdc_change_job

Надеюсь, это поможет кому-то еще: D.

person Eedoh    schedule 20.07.2010

Если вы хотите сохранить данные CDC на неопределенный срок, вы можете просто отключить задание очистки CDC:

  1. Откройте SQL Server Management Studio и подключитесь к серверу базы данных.
  2. В проводнике объектов разверните «‹экземпляр> | Агент SQL Server | Работа”
  3. Найдите задание для очистки с именем «cdc.‹имя базы данных>_cleanup».
  4. Щелкните задание правой кнопкой мыши и выберите «отключить».

Вот примерное изображение того, где найти опцию:

Как отключить очистку CDC

После отключения задания очистки данные CDC больше не будут удаляться через определенный интервал времени.

person magnattic    schedule 31.03.2014
comment
В чем разница между Stop Job и Disable в этом случае? - person Mark13426; 23.05.2014
comment
Мое предположение: stop останавливает его до следующего перезапуска сервера, disabled останавливает его навсегда. - person magnattic; 24.05.2014
comment
Спасибо Аттика за ответ. Есть вопрос по CDC... можем ли мы включить CDC для конкретной операции DML - только для обновления? - person Rajesh Bhat; 20.01.2017
comment
@Mark13426 - Stop Job останавливает задание, которое в данный момент выполняется. Он останется включенным и снова запустится в следующее запланированное время. Отключить предотвратит запуск формы задания в следующее запланированное время. Если текущее задание отключено, текущий запуск будет продолжен (если вы, конечно, не используете для него Остановить задание :-)). - person RDFozz; 24.03.2017

По умолчанию он удаляет все, что старше 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
person Siva    schedule 01.10.2018