Как добавить дополнительные столбцы в существующую таблицу сбора измененных данных (CDC) без потери данных

У меня есть таблица в Microsoft SQL Server 2008, для которой я уже включил CDC с 5 столбцами. Он уже работает и живет в производстве и имеет тысячи записей. Теперь мне нужно добавить 4 новых столбца в ту же таблицу и включить захват данных для вновь добавленных столбцов.

Я попробовал следующий сценарий: 1. Создал новый временный экземпляр для CDC и скопировал все данные из исходного CDC в экземпляр tempCDC. Теперь снова создайте экземпляр CDC с исходным именем и скопируйте все данные из временного экземпляра.

Но в этом случае начальные столбцы Lsn в CDC.change_tables сбрасываются. Я сохранил исходный начальный Lsn и заменил его исходным начальным Lsn в таблице CDC change_tables.

Но все же это не работает, и кажется, что при воссоздании экземпляра он сбрасывает стартовый LSN в некоторых местах внутри.

Таким образом, я не могу просмотреть отчет на основе таблицы CDC.


person Banketeshvar Narayan    schedule 14.06.2019    source источник
comment
Возможный дубликат Sql Server Change Data Capture: сохранение истории при добавить столбцы?   -  person Amira Bedhiafi    schedule 14.06.2019


Ответы (2)


Следующий запрос разрешил мою цель.

DECLARE @startLsn binary(10)

SELECT @startLsn = MIN([__$start_lsn]) FROM [cdc].[dbo_City_CT]

UPDATE [cdc].[change_tables] set [start_lsn] =@startLsn
WHERE [capture_instance] ='dbo_City';

Где [cdc].[dbo_City_CT] — это воссозданная таблица окончательного экземпляра, в которую включены все новые столбцы вместе со всеми существующими данными.

Так. Эта команда должна быть запущена, наконец, после «повторного создания экземпляра и восстановления старых данных».

person Banketeshvar Narayan    schedule 22.06.2019

У меня нет SQL 2008 для тестирования, но в более новых версиях вы можете сделать следующее:

  1. Создайте новый экземпляр захвата для измененной таблицы. У вас может быть 2 экземпляра для каждой таблицы, и новый будет включать новые столбцы.
  2. Добавьте содержимое таблицы _CT для первого экземпляра в таблицу _CT второго экземпляра.
  3. Удалите старый экземпляр захвата для этой таблицы.

Способ, которым вы пытались, невозможен, вы должны просто использовать новый экземпляр захвата.

person Adrian B    schedule 27.08.2019