Как изменить срок хранения CDC или поставить для него условие (SQL Server 2012)

Я нахожусь в среде SQL Server 2012, и у меня включен CDC для таблицы. Таким образом, таблица используется для заполнения хранилища данных (в основном, содержимое таблицы дублируется в другом месте).

Однако я только что заметил, что мы теряем много данных, потому что CDC был включен с настройкой по умолчанию 3 дня. Я знаю, как написать запрос, который включает CDC с НОВЫМ / другим периодом хранения. Но задача не в этом, задача в том, чтобы я мог изменить текущую настройку CDC. Итак, есть ли способ ИЗМЕНИТЬ срок хранения?

Кроме того, кроме того, есть ли способ предотвратить удаление CDC записей с истекшим сроком в целом? это означает, есть ли способ реализовать флаг, который не позволяет CDC удалять любые записи, ЕСЛИ эта запись уже не была передана / перемещена.

Большое тебе спасибо!


person LearnByReading    schedule 04.05.2015    source источник


Ответы (2)


sys.sp_cdc_change_job - это то, что вам нужно, чтобы изменить срок хранения.

Что касается вашего второго вопроса, CDC не может узнать, какие строки вы обработали, а какие нет. Таким образом, вы должны установить период хранения таким образом, чтобы у вас было достаточно времени для обработки записей, накопленных с момента последнего выполнения задания ETL. Типичный рабочий процесс, использующий CDC, выполняется на регулярной периодической основе (например, ежедневно, еженедельно). Поэтому я чувствую что-то странное, когда вы говорите, что теряете данные (если текущий период хранения не установлен ниже, чем время между запусками ETL).

person Ben Thul    schedule 04.05.2015
comment
Привет, спасибо за отличную ссылку. Но есть одна проблема: похоже, что sys.sp_cdc_change_job не принимает параметр в имени таблицы. Значит ли это, что срок хранения можно установить только на уровне базы данных? - person LearnByReading; 04.05.2015
comment
Кроме того, если вы являетесь экспертом CDC, не могли бы вы также взглянуть на мой другой вопрос? Было бы здорово, и я был бы весьма благодарен: stackoverflow.com/questions/29898661/ - person LearnByReading; 04.05.2015
comment
Это правильно - задание очистки настроено и запускается на уровне базы данных (в отличие от таблицы). Опять же, исходя из типичного рабочего процесса CDC, вы обычно обновляете все свое хранилище данных на определенный момент времени (в отличие от того, что разные таблицы находятся в разные моменты времени). - person Ben Thul; 04.05.2015
comment
Еще раз большое спасибо. Только один очень маленький вопрос: в sys.sp_cdc_change_job есть два типа заданий («захват» и «очистка»). Capture, я предполагаю, занимается только записью изменений, а «очистка» касается только удаления данных с истекшим сроком годности. Итак, что означает срок хранения в контексте захвата? Я использовал это: SELECT [retention] - / 60/24 AS [Retention_In_Days] FROM msdb.dbo.cdc_jobs WHERE job_type = N'capture '.. и получаю 0. Я не уверен, что это могло означать. Большое спасибо! - person LearnByReading; 04.05.2015
comment
Извини, забудь. Я слепой: здесь ясно сказано: сохранение действительно только для работ по очистке .. Прошу прощения за то, что пропустил это. - person LearnByReading; 04.05.2015

В частности, можно использовать следующую команду (в соответствии с ответом выше):

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