2011-03-15 58 views

回答

3

(從我的同事史蒂夫這樣的回答,但他沒有一個SO帳戶,這樣我會後它...)

如果添加一列,疾控中心不會改變......你繼續接收與之前相同列集的更新。

如果刪除一列,CDC將繼續捕獲更改,但刪除的列始終具有值NULL。

如果您ALTER列,CDC將繼續捕獲更改,但更改列中的值將具有新列類型。

0

從MSDN的About Change Data Capture (SQL Server)

「處理更改源表 爲了適應正在跟蹤的源表列的變化是對下游消費者一個棘手的問題。雖然能夠對源表變更數據捕獲不會阻止這種DDL發生變化的情況下,即使底層源表的列結構發生變化,通過允許通過API返回的結果集保持不變,變更數據捕獲也有助於減輕對消費者的影響。在定義的查詢函數訪問的基礎變更表中 爲了適應固定的列結構變化t能夠,負責填充更改表的捕獲進程將忽略啓用源表以更改數據捕獲時未捕獲的任何新列。如果刪除了一個被跟蹤的列,則會在隨後的變更條目中爲該列提供空值。但是,如果現有列的數據類型發生更改,則會將更改傳播到更改表以確保捕獲機制不會將數據丟失引入跟蹤的列。捕獲過程還會將檢測到的對跟蹤表列結構的更改發佈到cdc.ddl_history表中。消費者希望被警告可能必須在下游應用程序中進行調整,請使用存儲過程sys.sp_cdc_get_ddl_history。 通常,當DDL更改應用於其關聯的源表時,當前捕獲實例將繼續保持其形狀。但是,可以爲反映新列結構的表創建第二個捕獲實例。這允許捕獲進程對同一個源表進行更改爲具有兩個不同列結構的兩個不同的更改表。因此,儘管一個變更表可以繼續提供當前的操作程序,但第二個變更表可以驅動嘗試合併新列數據的開發環境。允許捕獲機制一起填充兩個更改表意味着可以完成從一個到另一個的轉換,而不會丟失更改數據。這兩個更改數據捕獲時間線重疊時可能會發生這種情況。當轉換生效時,可以刪除過時的捕獲實例。 注意注意 可以同時與單個源表關聯的捕獲實例的最大數量爲兩個。「

相關問題