Таблица CDC не работает после добавления новых столбцов в исходную таблицу
Два новых столбца были добавлены к нашей исходной таблице, в то время как CDC был все еще включен на таблице. Мне нужно, чтобы новые столбцы появились в таблице CDC, но я не знаю, какую процедуру следует выполнить для этого? Я уже отключил CDC в таблице, отключил CDC в БД, добавил новые столбцы в таблицу cdc.captured_columns и включил CDC. Но сейчас я не получаю данных в таблице CDC!
Есть ли какая-нибудь другая таблица CDC, которую необходимо обновить после добавления столбцов в исходную таблицу? Это все таблицы CDC в папке System Tables:
- cdc.captured_columns <-----, где я добавил новые столбцы
- cdc.change_tables
- cdc.dbo_myTable_CT <------ таблица, в которой регистрируются данные изменений
- cdc.ddl_history
- cdc.index_columns
- cdc.lsn_time_mapping
- dbo.systranschemas
1 ответ
Я рекомендую прочитать Отслеживание изменений в вашей корпоративной базе данных. Это очень подробно и глубоко. Среди других чрезвычайно полезных битов информации есть такие как:
Изменения DDL неограничены, пока включен захват данных изменений. Однако они могут оказать некоторое влияние на данные об изменениях, собираемые при добавлении или удалении столбцов. Если отслеживаемый столбец удален, все последующие записи в экземпляре захвата будут иметь значение NULL для этого столбца. Если столбец добавлен, он будет игнорироваться экземпляром захвата. Другими словами, форма экземпляра захвата задается при его создании.
Если требуются изменения столбцов, можно создать еще один экземпляр захвата для таблицы (не более двух экземпляров захвата на таблицу) и разрешить потребителям данных изменений перейти на новую схему таблицы.
Это очень разумный и продуманный дизайн, учитывающий смещение схемы (не все участники могут одновременно обновлять схему в реальном онлайн-развертывании). Наличие многоэтапного подхода (развертывание DDL, захват нового CDC, обновление подписчиков, удаление старого захвата CDC) является единственным выполнимым подходом, и вы должны следовать его примеру.