SQL Server 2008 引入了两项跟踪功能,以使应用程序能够确定对数据库中的用户表所做的 DML 更改(插入、更新和删除操作)。 在这些功能出现之前,必须在应用程序中实现自定义跟踪机制。 这些自定义机制通常要求对跟踪的表进行架构更改,或者使用触发器。 变更数据捕获和更改跟踪均不要求在源中进行任何架构更改或使用触发器。
变更数据捕获
变更数据捕获通过获取进行 DML 更改的方面和更改的实际数据,提供用户表的历史更改信息。 更改是使用异步进程捕获的,此进程读取事务日志,并且对系统造成的影响很小。
正如下图所示,对用户表所做的更改是在相应更改表中捕获的。 这些更改表提供了更改随时间变化的历史视图。 借助于 SQL Server 提供的功能,可以方便且系统地使用更改数据。
更改跟踪
更改跟踪捕获更改了表行这一事实,但不会捕获更改的数据。 这样,应用程序就可以确定使用从用户表中直接获取的最新行数据更改的行。 因此,与变更数据捕获相比,更改跟踪可以解答的历史问题比较有限。 但是,对于不需要历史信息的那些应用程序,更改跟踪产生的存储开销要小得多,因为它不需要捕获更改的数据。 它使用同步跟踪机制来跟踪更改。 此功能旨在最