Я включил CDC на нескольких непустых таблицах, это системные таблицы CDC под cdc. схема остается пустой, пока я не сделаю DDL/DML для базовых пользовательских таблиц?

Я использую задание ssis для извлечения данных CDC из источника в место назначения на основе значения lsn из созданных системой таблиц cdc (с суффиксом _CT).

когда я включил CDC, базовые таблицы уже имели много строк.

Теперь, при первом запуске ssis, мне нужно извлечь все существующие данные на основе lsn, прежде чем я начну выполнять операции DML, но все таблицы cdc пусты.

поэтому вопрос в том, включим ли мы cdc в непустую таблицу, не будет ли у нее данных cdc в системных таблицах cdc, прежде чем мы начнем изменять данные?

1 ответ

Решение

Краткий ответ: нет - в таблице CDC не будет копии исходных данных. Таблицы CDC заполняются чтением изменений (вставки, обновления, удаления) из журнала транзакций и вставкой их в таблицы CDC.

Я бы использовал снимок данных или резервную копию для инициализации ваших данных. В частности:

  1. Включить CDC на ваших столах
  2. Создайте резервную копию базы данных и восстановите ее где-нибудь или сделайте снимок базы данных
    • Если используется резервная копия базы данных, обратите внимание на контрольную точку LSN; вы можете найти это в msdb.dbo.backupset
    • Если используется снимок базы данных, обратите внимание на LSN снимка; Вы можете найти это используя DBCC DBINFO(DATABASENAME) WITH TABLERESULTS; (все ссылки на эту ссылку)
  3. Выполните массовую загрузку из базы данных, созданной на предыдущем шаге, в конечный пункт назначения.
  4. Для следующей (инкрементной) загрузки из данных CDC вы можете использовать LSN из предыдущего шага, чтобы перейти к cdc.fn_cdc_get_all_changes_<capture_instance>() или же cdc.fn_cdc_get_net_changes_<capture_instance>() функции. Это даст вам изменения, которые произошли с момента времени, представленного резервной копией или снимком, который вы использовали для начальной загрузки.
Другие вопросы по тегам