標籤:變更捕獲
某些應用程式(比如資料倉儲系統)十分依賴於源系統的變更資料識別功能,它們期望源系統能夠提供一種高效低識別變更資料的能力。在SQLServer 2008之前並沒有原生態的解決方案,開發人員不得不通過使用觸發器、時間戳記以及額外的表來實現該功能,在SQL Server2008之後,資料庫提供了兩種原生態的特性:Change Tracking(變更追蹤)及Change Data Capture(變更資料擷取)。
功能對比
簡單來講,所謂變更可以簡化為兩個問題:①變更有沒有發生以及變更的類型;②資料從什麼變更到了什麼。SQL Server變更追蹤的兩個功能的區別就在於對這兩個問題的回答。
Change Data Capture
變更時資料擷取功能同時回答了上面的兩個問題,這意味著當我們對一條資料做操作之後,它不僅標示說這條記錄被變更過來,而且同時會標示資料的變動曆史。從底層實現來講,該功能使用了一個非同步進程來讀取日誌表從而將對系統的影響降到最小。
如展示的,所有對某個使用者表所做的更改都會被儲存在相應的變動表中,這些變動表提供了變動的曆史視圖,記錄了隨時間變化而發生的更改:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/4F/9E/wKiom1RhxfqyCWZwAAD0Q2MTyWE283.jpg" title="1.png" alt="wKiom1RhxfqyCWZwAAD0Q2MTyWE283.jpg" />
Change Tracking
變更追蹤功能僅僅捕獲某條記錄被變更過,但是不會記錄資料的變動,這樣應用程式可以識別出那些記錄被更改過然後直接從基礎資料表中擷取最新的資料。這意味著變更追蹤功能無法回答一些曆史問題,但是這對於一些不需要知道曆史資訊僅需要知道變動是否發生的應用程式來說相當實用,因為該功能需要更少的儲存空間。資料庫實用一種非同步追蹤機制來追蹤變更。
區別
下表列出了這兩個特性的區別,CDC機制涉及到從交易記錄中捕獲變更,所以變更要在DML操作之後才能被捕獲到;ChangeTracking使用了內聯在DML操作中的非同步變更追蹤技術,所以變更資訊會立即可得。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/4F/9E/wKiom1RhxgPzlBZYAAC_PtacC1s494.jpg" title="2.png" alt="wKiom1RhxgPzlBZYAAC_PtacC1s494.jpg" />
SQL Server 之 - 變更資料跟蹤 1