標籤:變更追蹤
正如前面文章說道的,SQLServer 2008提供了兩種實現變更追蹤的功能,本部分主要討論的是Change Tracking功能。
啟用ChangeTracking
我們可以通過如下的步驟來啟用和使用ChangeTracking功能:
1. 在資料庫層級啟用Change Tracking
使用下面的語句在資料庫上啟用該功能(或者在SSMS的屬性彈出框中啟用),它的兩個參數分別表示變更資訊的存活時間以及是否啟用自動清除變更資訊任務:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/4F/D5/wKiom1Rh3SuCVY0NAABdRBsT41s660.jpg" title="1.png" alt="wKiom1Rh3SuCVY0NAABdRBsT41s660.jpg" />
2. 在需要的表上啟用Change Tracking
我們需要在每個想追蹤變更的表上執行啟用(需要注意的是,表必須具有主鍵才可以使用變更追蹤功能),可以使用如下的語句或使用表屬性彈出框:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/4F/D4/wKioL1Rh3Z_x1I2OAABZozSub8A008.jpg" title="2.png" alt="wKioL1Rh3Z_x1I2OAABZozSub8A008.jpg" />
其中參數TRACK_COLUMNS_UPDATED預設為False,因為維護列更新資訊需要額外的儲存開銷。
3. 理解Change Tracking帶來的開銷
開啟了Change Tracking會對資料庫操作產生一些影響,我們可以從管理操作、DML操作及儲存方面來查看它們具體的影響:
管理操作
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/4F/D4/wKioL1Rh3a6gQyy2AAHiFOf1mg4612.jpg" title="3.png" alt="wKioL1Rh3a6gQyy2AAHiFOf1mg4612.jpg" />
DML操作
儲存
使用ChangeTracking
在啟用了該功能之後就到了使用它的時候了,在啟用了該功能的資料庫上會有一個版本計數器,然後每當在啟用了變更追蹤的表上執行DML操作的時候都會產生一個新的Version號與之關聯,在某種程度上變更追蹤的版本號碼與rowversion資料類型有些相似。
現在我們可以很容易的想象如何使用變更追蹤的:
首先應用程式從資料庫做一次初始資料的載入
然後擷取當時的Version號並記錄一下以作為下次資料幫浦的起始點
然後當下次應用程式需要從資料庫做增量資料幫浦的時候,提供上次記錄下來的Version號並僅僅載入新的改動
如果很不幸的,應用程式在上次增量完成之後到下次增量抽取之間變動資訊被清除了,那麼應用程式不得不重新做一次全資料載入以防止資料不一致
資料庫提供了一下的函數來實現上面提到的功能:
1. CHANGE_TRACKING_CURRENT_VERSION()
擷取當下最新的變更的Version號
2. CHANGETABLE(CHANGES…)
該行集合函式返回變更資訊,它接受表明及Version號作為參數,然後從內部追蹤變更資訊的表中為該使用者表返回從提供了Version號之後發生的所有變更資訊
3. CHANGE_TRACKING_MIN_VALID_VERSION()
該函數需要一個表的object_id,然後返回當前資料庫中最小的有效Version號。應用程式在每次做增量抽取之前,應該判斷上次載入的Version號是否小於當前有效Version號,如果是的話意味著有些變更資訊因為某些原因已經被清除掉了,這時候必須做一次全資料載入
SQL Server 之 - 變更追蹤 2