启用和禁用更改跟踪 (SQL Server)

本主题介绍如何为数据库和表启用和禁用更改跟踪。

为数据库启用更改跟踪

您必须先在数据库级别启用更改跟踪,然后才能使用更改跟踪。 以下示例演示如何使用 ALTER DATABASE 启用更改跟踪。

ALTER DATABASE AdventureWorks2012  
SET CHANGE_TRACKING = ON  
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)  

还可以使用 “数据库属性”(ChangeTracking 页) 对话框在 SQL Server Management Studio 中启用更改跟踪。

可以在启用更改跟踪时指定 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)  

还可以使用 “数据库属性”(ChangeTracking 页) 对话框为 SQL Server Management Studio 中的表启用更改跟踪。

当TRACK_COLUMNS_UPDATED选项设置为 ON 时,SQL Server 数据库引擎会存储有关哪些列已更新到内部更改跟踪表的额外信息。 列跟踪使应用程序可以只同步那些已更新的列。 这可以提高效率和性能。 但是,由于维护列跟踪信息会增加一些额外的存储开销,因此此选项默认设置为 OFF。

禁用数据库或表的更改跟踪

必须首先为所有启用了更改跟踪的表禁用更改跟踪,然后才能将数据库的更改跟踪设为 OFF。 若要确定为数据库启用了更改跟踪的表,请使用 sys.change_tracking_tables 目录视图。

当数据库中没有用于跟踪更改的表时,便可以禁用数据库的更改跟踪。 以下示例演示如何使用 ALTER DATABASE 禁用数据库的更改跟踪。

ALTER DATABASE AdventureWorks2012  
SET CHANGE_TRACKING = OFF  

以下示例演示如何使用 ALTER TABLE 禁用表的更改跟踪。

ALTER TABLE Person.Contact  
DISABLE CHANGE_TRACKING;  

另请参阅

数据库属性(变更跟踪页)
ALTER DATABASE SET 选项 (Transact-SQL)
sys.change_tracking_databases(Transact-SQL)
sys.change_tracking_tables(Transact-SQL)
跟踪数据更改 (SQL Server)
关于更改跟踪 (SQL Server)
处理变更数据 (SQL Server)
管理更改跟踪 (SQL Server)