基於 SQL Server 2008 11 月 CTP,驗證資料表結構變更 (加欄位) 後,CDC 擷取行為與如何調整捕獲欄位清單。
CREATE DATABASE CDCDB;
USE CDCDB;
CREATE TABLE Employee (ID int NOT NULL, Name varchar(100) NULL, CONSTRAINT Employee_PK PRIMARY KEY CLUSTERED (ID));
EXEC sys.sp_cdc_enable_db_change_data_capture;
EXEC sys.sp_cdc_enable_table_change_data_capture @source_schema='dbo', @source_name='Employee', @role_name='cdc_Employee';
ALTER TABLE Employee ADD Address varchar(500);
ALTER TABLE Employee ADD Salary money;
ALTER TABLE Employee ADD Bonus money;
INSERT INTO Employee VALUES (1, 'DancingDoll', '...', 60000, 1000);
... (共 5 筆)
UPDATE Employee SET Name = 'test' WHERE ID = 5;
DELETE Employee WHERE ID IN (3,4);
SELECT * FROM cdc.ddl_history;
記錄 3 筆 ALTER TABLE 命令。
SELECT CASE __$operation WHEN 1 THEN 'Deleting' WHEN 2 THEN 'Inserting' WHEN 3 THEN 'ValueBeforeUpdate' WHEN 4 THEN 'ValueAfterUpdate' END, __$update_mask, ID, Name
FROM cdc.dbo_Employee_CT;
結果顯示:僅原始啟用 CDC 時存在的 ID、Name 兩欄被監控,後加入的 Address、Salary、Bonus 未被捕獲。
-- 停用現有 CDC
EXEC sys.sp_cdc_disable_table_change_data_capture @source_schema='dbo', @source_name='Employee', @capture_instance='dbo_Employee';
-- 重新啟用並指定捕獲欄位清單
EXEC sys.sp_cdc_enable_table_change_data_capture
@source_schema='dbo', @source_name='Employee', @role_name='cdc_Employee',
@captured_column_list=N'ID,Name,Salary,Bonus';
再次查詢變更表,指定欄位皆被監控。
CDC 啟用後新增欄位預設不被捕獲,需停用並重新啟用 CDC 並指定 @captured_column_list 以擴展監控範圍,靈活應對結構描述演進。