2012-03-01 3 views
2

Я обновляю базу данных SQL Server 2000 до SQL Server 2008 R2. Я хочу использовать функцию «Изменить данные». Im мое существующее приложение У меня есть аналогичная функциональность, но я использую триггеры и историческую таблицу с префиксом Hst_ с почти аналогичной схемой, как и исходные таблицы.Change Data Capture - начальная загрузка исторических данных

Мой вопрос: Есть ли способ перенести мои данные из Hst_ таблиц в таблицы, используемые функцией CDC?

Я думал сделать это так:

  • У меня есть таблица Cases.
  • Я использую свой собственный механизм историзации, поэтому у меня также есть три триггера (при вставке, обновлении и удалении) и двойная таблица Hst_Cases.
  • Теперь я позволяя CDC на столе Cases
  • CDC создает функцию, которая возвращает исторические данные (fn_cdc_get_all_changes_dbo_Cases), а также система таблиц, которая фактически содержит данные (cdc.dbo_Cases_CT).
  • Я мог бы вставить данные из Hst_Cases в cdc.dbo_Cases_CT, но у меня есть следующие проблемы:
    • я не знаю, как получить __$start_lsn и __$seqval.
    • Трудно определить __$update_mask (мне нужно сравнить каждую строку).

Есть единственный способ сделать это? Я хочу избежать ситуации, затем присоединяюсь к «новым» историческим данным со «старыми» историческими данными из таблиц Hst_.

Спасибо!

ответ

1

Обычно вы не хотите использовать таблицы захвата для хранения данных долгосрочных изменений, было бы лучше, если бы пакет SSIS переместил данные захвата в постоянные таблицы. Если вы их используете, я думаю, что если вам когда-нибудь понадобится восстановить вашу базу данных, они будут пустыми после восстановления, если вы не используете параметр KEEP_CDC при восстановлении. Вам также необходимо отключить задание, которое автоматически очищает таблицы захвата.

Если вы создаете свои собственные таблицы для хранения, вы можете опустить поля lsn и mask.