CDC(Change Data Capture)通過對事務日志的異步讀取,記錄DML操作的發生時間、類型和實際影響的 數據變化,然後將這些數據記錄到啟用CDC時自動創建的表中。通過cdc相關的存儲過程,可以獲取詳細的 數據變化情況。由於數據變化是異步讀取的,因此對整體性能的影響不大,遠小於通過Trigger實現的數 據變化記錄。
下面我用一個實例講解這個功能。該功能主要在ETL解決方案中比較有用。
USE AdventureWorksDW; GO EXECUTE sys.sp_cdc_enable_db; --啟用數據庫對CDC的支持 GO EXEC sys.sp_cdc_enable_table 'dbo', 'FactInternetSales', @role_name = NULL, @supports_net_changes =0; --啟用某個表對CDC的 支持 GO --這裡的supports_net_changes指的是是否支持所謂的淨更改,即過濾掉重復的 SELECT name, is_tracked_by_cdc FROM sys.tables WHERE name LIKE ('fact%'); INSERT INTO FactInternetSales VALUES (484,1127,1139,1134,18759,1,100,6,'SO75124',1,1,1,21.9800,21.9800,0,0,8.2205,8.2205,21.9800, 1.7584,0.5495,NULL,NULL); INSERT INTO FactInternetSales VALUES (486,1127,1139,1134,18759,1,100,6,'SO75125',1,1,1,21.9800,21.9800,0,0,8.2205,8.2205,21.9800, 1.7584,0.5495,NULL,NULL); UPDATE FactInternetSales SET PromotionKey = 2 WHERE SalesOrderNumber = 'SO75124'; DELETE FROM FactInternetSales WHERE SalesOrderNumber='SO75125' SELECT * FROM cdc.dbo_FactInternetSales_CT; --這個表其實是在系統表裡面