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

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例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_RETENTIONAUTO_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