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; --這個表其實是在系統表裡面
