更改跟踪是一种轻型解决方案,可为应用程序提供高效的更改跟踪机制。 通常,若要使应用程序能够查询对数据库中的数据所做的更改和访问与这些更改相关的信息,应用程序开发人员必须实现自定义更改跟踪机制。 创建这些机制通常涉及大量工作,并且经常使用触发器、 timestamp
列、新表的组合来存储跟踪信息和自定义清理过程。
不同类型的应用程序对其所需的有关更改的信息量有不同的要求。 应用程序可以使用更改跟踪来回答以下有关对用户表所做更改的问题:
用户表中有哪些行发生了更改?
所需的只是行已更改的事实,而不是行更改的次数或任何中间更改的值。
可以从所跟踪的表中直接获取最新的数据。
某行是否已更改?
- 当在同一事务中进行更改时,必须提供并记录行已更改的事实以及有关这一更改的信息。
注释
如果应用程序需要有关所做的所有更改和已更改数据的中间值的信息,则使用更改数据捕获(而不是更改跟踪)可能是合适的。 有关详细信息,请参阅关于变更数据捕获 (SQL Server)。
One-Way 和 Two-Way 同步应用程序
需要将数据与 SQL Server 数据库引擎实例同步的应用程序必须能够查询更改。 更改跟踪可用作单向和双向同步应用程序的基础。
One-Way 同步应用软件
可以使用更改跟踪构建单向同步应用程序,例如客户端或中间层缓存应用程序。 如下图所示,缓存应用程序要求在 数据库引擎 中存储数据并在其他数据存储区中缓存数据。 应用程序必须能够使用对数据库表所做的任何更改来使缓存保持最新。 没有要传回到的 数据库引擎的更改。
Two-Way 同步应用程序
还可以生成使用更改跟踪的双向同步应用程序。 在此方案中, 数据库引擎 实例中的数据与一个或多个数据存储区同步。 可以更新这些存储区中的数据,并且这些更改必须再同步到 数据库引擎中。
双向同步应用程序的一个很好的示例是偶尔连接的应用程序。 在此类型的应用程序中,客户端应用程序查询和更新本地存储。 当客户端和服务器之间的连接可用时,应用程序将与服务器同步,数据将在两个方向上流动。
双向同步应用程序必须能够检测冲突。 如果在同步之间的时间中两个数据存储中更改了相同的数据,则会发生冲突。 借助检测冲突的能力,应用程序可以确保不会丢失更改。
变更跟踪工作原理
若要配置更改跟踪,可以使用 DDL 语句或 SQL Server Management Studio。 有关详细信息,请参阅“启用和禁用更改跟踪”(SQL Server)。 若要跟踪更改,必须先为数据库启用更改跟踪,然后为要在该数据库中跟踪的表启用更改跟踪。 表定义不必以任何方式更改,也不会创建任何触发器。
为表配置更改跟踪后,影响表中行的任何 DML 语句都将导致记录每个修改行的更改跟踪信息。 若要查询已更改的行并获取有关更改的信息,可以使用 更改跟踪函数。
主键列的值是跟踪表中唯一与更改信息一起记录的信息。 这些值标识已更改的行。 要获取这些行的最新数据,应用程序可以使用主键列值联接源表和所跟踪的表。
还可以使用更改跟踪获取有关对每行所做的更改的信息。 例如,导致更改的DML操作的类型(插入、更新或删除),或者更新操作中被更改的列。
另请参阅
启用和禁用更改跟踪(SQL Server)
使用更改跟踪 (SQL Server)
管理更改跟踪 (SQL Server)
跟踪数据更改 (SQL Server)