Я включил CDC на нескольких непустых таблицах, это системные таблицы CDC под cdc. схема остается пустой, пока я не сделаю DDL/DML для базовых пользовательских таблиц?
Я использую задание ssis для извлечения данных CDC из источника в место назначения на основе значения lsn из созданных системой таблиц cdc (с суффиксом _CT).
когда я включил CDC, базовые таблицы уже имели много строк.
Теперь, при первом запуске ssis, мне нужно извлечь все существующие данные на основе lsn, прежде чем я начну выполнять операции DML, но все таблицы cdc пусты.
поэтому вопрос в том, включим ли мы cdc в непустую таблицу, не будет ли у нее данных cdc в системных таблицах cdc, прежде чем мы начнем изменять данные?
1 ответ
Краткий ответ: нет - в таблице CDC не будет копии исходных данных. Таблицы CDC заполняются чтением изменений (вставки, обновления, удаления) из журнала транзакций и вставкой их в таблицы CDC.
Я бы использовал снимок данных или резервную копию для инициализации ваших данных. В частности:
- Включить CDC на ваших столах
- Создайте резервную копию базы данных и восстановите ее где-нибудь или сделайте снимок базы данных
- Если используется резервная копия базы данных, обратите внимание на контрольную точку LSN; вы можете найти это в msdb.dbo.backupset
- Если используется снимок базы данных, обратите внимание на LSN снимка; Вы можете найти это используя
DBCC DBINFO(DATABASENAME) WITH TABLERESULTS;
(все ссылки на эту ссылку)
- Выполните массовую загрузку из базы данных, созданной на предыдущем шаге, в конечный пункт назначения.
- Для следующей (инкрементной) загрузки из данных CDC вы можете использовать LSN из предыдущего шага, чтобы перейти к
cdc.fn_cdc_get_all_changes_<capture_instance>()
или жеcdc.fn_cdc_get_net_changes_<capture_instance>()
функции. Это даст вам изменения, которые произошли с момента времени, представленного резервной копией или снимком, который вы использовали для начальной загрузки.