что происходит с экземпляром захвата изменения данных, когда базовая таблица изменяется? - PullRequest
3 голосов
/ 16 марта 2011

Если я включу сбор данных изменений для таблицы, а затем кто-нибудь еще добавит столбец в таблицу, повлияет ли мой захват?Буду ли я получать обновления для оригинальных столбцов?Для нового столбца?

Что делать, если столбец удален?

Ответы [ 2 ]

3 голосов
/ 07 апреля 2011

(Этот ответ от моего коллеги Стива, но у него нет учетной записи SO, поэтому я опубликую его ...)

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

Если вы УДАЛЕТЕ столбец, CDC продолжает записывать изменения, но удаленный столбец всегда будет иметь значение NULL.

ВЫ изменяете столбец, CDC продолжает записывать изменения, но значения в измененном столбце будут иметь новый тип столбца.

0 голосов
/ 25 ноября 2014

Из MSDN Об изменении данных (SQL Server)

«Обработка изменений в исходных таблицах» Учет изменений столбцов в исходных таблицах, которые отслеживаются, является сложной проблемой для нижестоящих потребителей. Хотя включение сбора данных об изменениях в исходной таблице не препятствует возникновению таких изменений DDL, сбор данных об изменениях помогает смягчить влияние на потребителей, позволяя оставленным полученным наборам результатов, возвращаемым через API, оставаться неизменными даже в виде структуры столбцов таблицы. изменения в исходной таблице. Эта фиксированная структура столбцов также отражена в базовой таблице изменений, к которой имеют доступ определенные функции запросов. Чтобы приспособить фиксированную таблицу изменений структуры столбцов, процесс захвата, ответственный за заполнение таблицы изменений, будет игнорировать любые новые столбцы, которые не идентифицированы для захвата, когда исходная таблица была включена для захвата данных изменений. Если отслеживаемый столбец удален, для последующих столбцов изменений будут предоставлены нулевые значения для столбца. Однако если существующий столбец претерпевает изменение в своем типе данных, это изменение распространяется на таблицу изменений, чтобы гарантировать, что механизм захвата не приведет к потере данных в отслеживаемых столбцах. Процесс захвата также отправляет любые обнаруженные изменения в структуру столбцов отслеживаемых таблиц в таблицу cdc.ddl_history. Потребители, желающие получать уведомления о корректировках, которые могут быть сделаны в последующих приложениях, используют хранимую процедуру sys.sp_cdc_get_ddl_history. Как правило, текущий экземпляр захвата будет продолжать сохранять свою форму, когда изменения DDL будут применены к связанной с ним исходной таблице. Тем не менее, можно создать второй экземпляр захвата для таблицы, который отражает новую структуру столбца. Это позволяет процессу захвата вносить изменения в одну и ту же исходную таблицу в две разные таблицы изменений, имеющие две разные структуры столбцов. Таким образом, хотя одна таблица изменений может продолжать поддерживать текущие рабочие программы, вторая может управлять средой разработки, которая пытается включить новые данные столбца. Разрешение механизма захвата заполнять обе таблицы изменений в тандеме означает, что переход от одной к другой может быть выполнен без потери данных об изменениях. Это может произойти в любое время, когда два графика изменения данных перекрываются. Когда переход осуществляется, устаревший экземпляр захвата может быть удален. Примечание Примечание Максимальное количество экземпляров захвата, которые могут быть одновременно связаны с одной исходной таблицей, равно двум. "

...