cdc.<capture_instance>_CT (Transact-SQL)
這是在來源資料表啟用異動資料擷取時所建立的變更資料表。此資料表會針對在來源資料表上執行的每個插入和刪除作業傳回一個資料列,而且會針對在來源資料表上執行的每個更新作業傳回兩個資料列。如果在啟用來源資料表時沒有指定變更資料表的名稱,就會衍生此名稱。此名稱的格式為 cdc.capture_instance_CT,其中 capture_instance 是來源資料表的結構描述名稱,而來源資料表名稱採用了 schema_table 格式。例如,如果 AdventureWorks2008R2 範例資料庫中的 Person.Address 資料表啟用了異動資料擷取,衍生的變更資料表名稱就是 cdc.Person_Address_CT。
我們建議您不要直接查詢系統資料表。請改為執行 cdc.fn_cdc_get_all_changes_<capture_instance> 和 cdc.fn_cdc_get_net_changes_<capture_instance> 函數。
資料行名稱 |
資料類型 |
描述 |
---|---|---|
__$start_lsn |
binary(10) |
與變更之認可交易相關聯的記錄序號 (LSN)。 在相同交易中認可的所有變更都會共用相同的認可 LSN。例如,如果來源資料表上的刪除作業移除了兩個資料列,則變更資料表將會包含兩個資料列,而且每個資料列都具有相同的 __$start_lsn 值。 |
__$end_lsn |
binary(10) |
僅供參考之用。不支援。我們無法保證未來的相容性。 在 SQL Server 2008 中,這個資料行一律是 NULL。 |
__$seqval |
binary(10) |
用來排序交易內資料列變更的序列值。 |
__$operation |
int |
識別與變更相關聯的資料操作語言 (DML) 作業。可以是下列其中一項: 1 = 刪除 2 = 插入 3 = 更新 (舊的值) 執行更新陳述式之前,資料行資料具有資料列值。 4 = 更新 (新的值) 執行更新陳述式之後,資料行資料具有資料列值。 |
__$update_mask |
varbinary(128) |
位元遮罩,可根據變更資料表的資料行序數識別這些變更的資料行。 |
<擷取的來源資料表資料行> |
變化 |
變更資料表中的其餘資料行都是建立擷取執行個體時,在來源資料表中識別成擷取資料行的資料行。如果擷取的資料行清單中沒有指定任何資料行,這個資料表就會包含來源資料表中的所有資料行。 |
備註
擷取資料行資料類型
包含在這個資料表中的擷取資料行與對應的來源資料行具有相同的資料類型和值,但下列情況除外:
Timestamp 資料行定義為 binary(8)。
Identity 資料行定義為 int 或 bigint。
不過,這些資料行中的值與來源資料行的值相同。
大型物件資料類型
若為 varchar(max)、nvarchar(max)、varbinary(max)、image、text、ntext 和 xml 等 LOB 資料類型,如果資料行實際在更新期間變更,舊的值將只會顯示在更新舊值資料列中。若為其他資料類型,資料行值將一律顯示在這兩個更新資料列中。
根據預設,在單一 INSERT、UPDATE、WRITETEXT 或 UPDATETEXT 陳述式中可加入至擷取資料行的大小上限為 65,536 個位元組或 64 KB。若要增加這個大小以便支援更大的 LOB 資料,請使用最大文字複寫大小選項來指定更大的大小上限。如需詳細資訊,請參閱<如何:設定最大文字複寫大小選項 (SQL Server Management Studio)>。
資料定義語言修改
對來源資料表所做的 DDL 修改 (例如,加入或卸除資料行) 都會記錄在 cdc.ddl_history 資料表中。這些變更不會套用至變更資料表。也就是說,變更資料表的定義會維持不變。將資料列插入變更資料表時,擷取處理序會忽略沒有顯示在與來源資料表相關聯之擷取資料行清單中的這些資料行。如果某個資料行顯示在擷取資料行清單中,但是該資料行已不存在來源資料表中,系統就會指派 Null 值給此資料行。
在來源資料表中變更資料行的資料類型也會記錄於 cdc.ddl_history 資料表中。不過,這項變更不會更改變更資料表的定義。當擷取處理序遇到對來源資料表所做 DDL 變更的記錄檔記錄時,變更資料表中擷取資料行的資料類型就會遭修改。
如果您必須以減少資料類型大小的方式來修改來源資料表中擷取資料行的資料類型,請依照下列步驟來確保變更資料表中的對等資料行可成功進行修改。
在來源資料表中,更新即將修改之資料行的值,以便符合規劃的資料類型大小。例如,如果您將資料類型從 int 變更為 smallint,請將這些值更新為符合 smallint 範圍的大小 (-32,768 至 32,767)。
在變更資料表中,在對等的資料行上執行相同的更新作業。
透過指定新的資料類型,更改來源資料表。然後,資料類型變更就會成功地傳播至變更資料表。
資料操作語言修改
在啟用異動資料擷取的來源資料表上執行插入、更新和刪除作業時,這些 DML 作業的記錄就會顯示在資料庫交易記錄中。異動資料擷取的擷取處理序會從交易記錄中擷取這些變更的相關資訊,然後將一或兩個資料列加入至變更資料表,以便記錄變更。雖然變更資料表項目的認可通常必須針對一組變更而非單一項目執行,不過將項目加入至變更資料表的順序會與來源資料表認可這些項目的順序相同。
在變更資料表項目中,__$start_lsn 資料行是用來記錄與來源資料變更相關聯的認可 LSN,而 __$seqval column 則是用來在交易中排列變更的順序。這些中繼資料資料行可一起用來確保來源變更的認可順序會保留下來。由於擷取處理序會從交易記錄中取得其變更資訊,因此請務必注意,變更資料表項目不會以同步方式隨著其對應的來源資料表變更顯示。不過,當擷取處理序已經處理來自交易記錄的相關變更項目之後,對應的變更會以非同步方式顯示。
若為插入和刪除作業,就會設定更新遮罩中的所有位元。若為更新作業,就會同時修改更新舊值與更新新值資料列中的更新遮罩,以便反映在更新期間變更的資料行。