变更数据捕获和更改跟踪

比较变更数据捕获和更改跟踪

SQL Server 2008 引入了两项跟踪功能,以使应用程序能够确定对数据库中的用户表所做的 DML 更改(插入、更新和删除操作)。 在这些功能出现之前,必须在应用程序中实现自定义跟踪机制。 这些自定义机制通常要求对跟踪的表进行架构更改,或者使用触发器。 变更数据捕获和更改跟踪均不要求在源中进行任何架构更改或使用触发器。

变更数据捕获

 

变更数据捕获通过获取进行 DML 更改的方面和更改的实际数据,提供用户表的历史更改信息。 更改是使用异步进程捕获的,此进程读取事务日志,并且对系统造成的影响很小。

正如下图所示,对用户表所做的更改是在相应更改表中捕获的。 这些更改表提供了更改随时间变化的历史视图。 借助于 SQL Server 提供的变更数据捕获功能,可以方便且系统地使用更改数据。

 

 

更改跟踪

 

 

更改跟踪捕获更改了表行这一事实,但不会捕获更改的数据。 这样,应用程序就可以确定使用从用户表中直接获取的最新行数据更改的行。 因此,与变更数据捕获相比,更改跟踪可以解答的历史问题比较有限。 但是,对于不需要历史信息的那些应用程序,更改跟踪产生的存储开销要小得多,因为它不需要捕获更改的数据。 它使用同步跟踪机制来跟踪更改。 此功能旨在最大限度地减少 DML 操作开销。

下图显示了从使用更改跟踪中受益的同步方案。 在此方案中,应用程序需要以下信息:在上次表同步后更改的所有表行以及仅当前行数据。 由于使用同步机制来跟踪更改,因此,应用程序可以执行双向同步,并且可靠地检测到可能发生的任何冲突。

 

 

 

 

变更数据捕获与更改跟踪之间的功能差异

 

下表列出了变更数据捕获与更改跟踪之间的功能差异。 变更数据捕获中的跟踪机制涉及从事务日志中异步捕获更改,因此,可以在执行 DML 操作后获得更改信息。 更改跟踪中的跟踪机制涉及在执行 DML 操作的同时同步跟踪更改,因此,可以立即获得更改信息。

 

功能

变更数据捕获

更改跟踪

跟踪的更改

 

 

DML 更改

跟踪的信息

 

 

历史数据

是否更改了列

DML 类型

 

 

 

 

变更数据捕获

变更数据捕获用于捕获应用到 SQL Server 表中的插入、更新和删除活动,并以易于使用的关系格式提供这些变更的详细信息。变更数据捕获所使用的更改表中包含镜像所跟踪源表列结构的列,同时还包含了解所发生的变更所需的元数据。

变更数据捕获仅在 SQL Server Enterprise Edition、Developer Edition 和 Evaluation Edition 中可用。

本节涉及的主题

 

本节中的主题介绍了变更数据捕获的工作原理,以及如何为变更数据捕获配置数据库。

参考

 

以下主题包含了在变更数据捕获中使用的存储过程、表和函数的相关参考信息。

 

主题

说明

更改数据捕获存储过程 (Transact-SQL)

介绍了为使用变更数据捕获提供的存储过程,包括用于启用对数据库和表的变更数据捕获的过程。

与变更数据捕获相关的动态管理视图

介绍用于显示有关变更数据捕获事务和日志会话的信息的视图。

变更数据捕获表 (Transact-SQL)

介绍了存储变更数据和元数据的表。

变更数据捕获函数

介绍了为查询变更数据提供的函数,包括用于检索变更和用于在 datetime 值和日志序列号之间进行映射的函数。

 
 

 

 

更改跟踪

SQL Server 2008 中的更改跟踪使应用程序可以仅获取对用户表所做的更改以及与这些更改有关的信息。将更改跟踪集成到 SQL Server 后,就不必再开发复杂的自定义更改跟踪解决方案了。

对于在端对端复制解决方案不起作用而需要自定义解决方案的情况下同步和复制数据的应用程序,更改跟踪是一个重要的构造块。例如,当需要将数据与不是 SQL Server 数据库的数据存储区或其中的存储架构有很大差异的数据存储区同步时,就是这样的情况。

本节内容

 

  • 更改跟踪概述
    介绍更改跟踪,提供更改跟踪工作方式的概要说明,并描述更改跟踪如何与其他 SQL Server 数据库引擎功能进行交互。

  • 配置和管理更改跟踪
    提供如何配置更改跟踪以及如何管理更改跟踪数据的概要说明。

  • 使用更改跟踪
    显示如何使用更改跟踪来枚举更改和进行单向及双向同步。

相关函数

 

 

函数

说明

CHANGETABLE (Transact-SQL)

用于获取在指定版本之后对某个表所做的所有更改的跟踪信息,或者获取指定行的最新更改跟踪信息。

CHANGE_TRACKING_MIN_VALID_VERSION (Transact-SQL)

用于获取在使用 CHANGETABLE 函数获取来自指定表的更改跟踪信息时要用的最低有效版本。

CHANGE_TRACKING_CURRENT_VERSION (Transact-SQL)

获取与上次提交事务关联的版本。您可以在下一次使用 CHANGETABLE 来枚举更改时使用此版本。

CHANGE_TRACKING_IS_COLUMN_IN_MASK (Transact-SQL)

用于解释由 CHANGETABLE(CHANGES …) 函数返回的 SYS_CHANGE_COLUMNS 值。

WITH CHANGE_TRACKING_CONTEXT

用于在应用程序更改数据时指定更改上下文,例如发起方 ID。

相关目录视图

 

 

目录视图

说明

sys.change_tracking_databases (Transact-SQL)

用于为 SQL Server 实例中启用了更改跟踪的每个数据库都返回一行。

sys.change_tracking_tables (Transact-SQL)

为当前数据库中已启用更改跟踪的每个表返回一行。

posted @ 2018-06-06 09:57  读喜爱  阅读(737)  评论(0编辑  收藏  举报