經常會有需求記錄用戶表中由DML操作(Insert/Updae/Delete)引起的數據變化,在SQL Server 2008 以前的版本中,要實現這樣的功能只能通過Trigger或者數據比對(例如SCD處理),而且必須針對每個用戶 表開發。SQL Server 2008中新增了兩種記錄數據變化的功能,本文就Change Data Capture(CDC)和 Change Tracking的特性做簡要對比。
Change Data Capture
CDC通過對事務日志的異步讀取,記錄DML操作的發生時間、類型和實際影響的數據變化,然後將這些 數據記錄到啟用CDC時自動創建的表中。通過cdc相關的存儲過程,可以獲取詳細的數據變化情況。由於數 據變化是異步讀取的,因此對整體性能的影響不大,遠小於通過Trigger實現的數據變化記錄。
下圖來自於SQL Server Books Online,說明了CDC可用於獲取不同時間段內的變化。
Change Tracking
不同於Change Data Capture,Change Tracking僅記錄DML操作的發生時間、類型和影響到的字段,不 包含具體的變化數值,客戶端通過傳傳遞上次同步的版本號來獲取從上次同步到現在的變化記錄。對於應 用數據緩存的場合,這個功能非常實用,可以每隔一定時間獲取數據表中的變化記錄,然後根據變化記錄 中的主鍵來獲取更新過的數據從而刷新緩存。
Change Tracking通過對要執行的DML語句的分析獲取變化記錄,而不是去讀取日志。DML語句提交執行 時Change Tracking便已可用,而不需要等待DML完成後事務日志寫入時才可用,因此Change Tracking的 響應比Change Data Capture要快。
Change Tracking記錄的數據比Change Data Capture少,對服務器性能的影響也小。