適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
本文說明如何啟用和停用資料庫和資料表的變更追蹤。
為資料庫啟用變更追蹤
在您可以使用變更追蹤之前,必須先在資料庫層級啟用變更追蹤。 下列範例示範如何使用 ALTER DATABASE SET 選項來啟用變更追蹤。
ALTER DATABASE AdventureWorks2022
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)
您也可以使用 [資料庫屬性 (變更追蹤頁面)] 對話方塊,在 SQL Server Management Studio 中啟用變更追蹤。 如果資料庫包含記憶體最佳化資料表,您就無法使用 SQL Server Management Studio 來啟用變更追蹤。 若要啟用,請使用 T-SQL。
您可以在啟用變更追蹤時指定 CHANGE_RETENTION 和 AUTO_CLEANUP 選項,而且您可以在啟用變更追蹤之後隨時變更值。
變更保留值會指定保存變更追蹤資訊的期間。 早於此期間的變更追蹤資訊會定期遭到移除。 當您設定此值時,您應該考慮應用程式與資料庫中資料表同步的頻率。 指定的保留期間至少必須與同步處理之間的期間上限一樣長。 如果應用程式在較長的間隔上取得變更,所傳回的結果可能會不正確,因為變更資訊的某部分可能已遭到移除。 為了避免取得不正確的結果,應用程式可以使用 CHANGE_TRACKING_MIN_VALID_VERSION 系統函數來判斷同步處理之間的間隔是否已經過長。
您可以使用此 AUTO_CLEANUP 選項來啟用或停用移除舊變更追蹤資訊的清除工作。 當發生暫時性問題導致應用程式無法同步處理,且移除早於保留期間的變更追蹤資訊的程式必須暫停,直到問題解決為止,這會很有用。
如果是使用變更追蹤的任何資料庫,請注意以下事項:
若要使用變更追蹤,資料庫相容性層級必須設定為 90 以上 (含)。 如果資料庫的相容性層級低於 90,您也可以設定變更追蹤。 不過,用來取得變更追蹤資訊的 CHANGETABLE 函數將會傳回錯誤。
若要確保所有變更追蹤資訊都一致,使用快照隔離是最簡單的方式。 基於這個理由,我們強烈建議將資料庫的快照隔離設定為
ON。 如需詳細資訊,請參閱使用變更追蹤 (SQL Server)。
為資料表啟用變更追蹤
您必須針對您要追蹤的每一個資料表啟用變更追蹤。 啟用變更追蹤時,系統會針對資料表中受到 DML 作業影響的所有資料列維護變更追蹤資訊。
下列範例示範如何使用 ALTER TABLE,為資料表啟用變更追蹤。
ALTER TABLE Person.Contact
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON)
您也可以使用 [資料庫屬性 (變更追蹤頁面)] 對話方塊,在 SQL Server Management Studio 中為資料表啟用變更追蹤。
當選項 TRACK_COLUMNS_UPDATED 設定為 ON時,SQL Server 資料庫引擎會儲存哪些資料行已更新至內部變更追蹤資料表的額外資訊。 資料欄位追蹤可以使應用程式僅同步那些已更新的欄位。 這樣可以改善效率與效能。 不過,由於維護資料行追蹤資訊會增加一些額外的儲存額外負荷,因此依預設會將此選項設為 OFF 。
為資料表或資料庫停用變更追蹤
必須先停用所有變更追蹤資料表的變更追蹤,才能將資料庫的變更追蹤設定為 OFF 。 若要判斷已針對資料庫啟用變更追蹤的資料表,請使用 sys.change_tracking_tables 目錄檢視。
下列範例示範如何使用 ALTER TABLE,為資料表停用變更追蹤。
ALTER TABLE Person.Contact
DISABLE CHANGE_TRACKING;
當資料庫中沒有任何資料表追蹤變更時,您可以為此資料庫停用變更追蹤。 下列範例示範如何使用 ALTER DATABASE SET 選項來停用資料庫的變更追蹤。
ALTER DATABASE AdventureWorks2022
SET CHANGE_TRACKING = OFF