首页 > 代码库 > SQL Server 之 - 变更追踪 2

SQL Server 之 - 变更追踪 2

正如前面文章说道的,SQLServer 2008提供了两种实现变更追踪的功能,本部分主要讨论的是Change Tracking功能。

激活ChangeTracking

我们可以通过如下的步骤来激活和使用ChangeTracking功能:

1. 在数据库级别激活Change Tracking

使用下面的语句在数据库上激活该功能(或者在SSMS的属性弹出框中激活),它的两个参数分别表示变更信息的存活时间以及是否激活自动清除变更信息任务:

wKiom1Rh3SuCVY0NAABdRBsT41s660.jpg

2. 在需要的表上激活Change Tracking

我们需要在每个想追踪变更的表上执行激活(需要注意的是,表必须具有主键才可以使用变更追踪功能),可以使用如下的语句或使用表属性弹出框:

wKioL1Rh3Z_x1I2OAABZozSub8A008.jpg

其中参数TRACK_COLUMNS_UPDATED默认为False,因为维护列更新信息需要额外的存储开销。

3. 理解Change Tracking带来的开销

开启了Change Tracking会对数据库操作产生一些影响,我们可以从管理操作、DML操作及存储方面来查看它们具体的影响:

  1. 管理操作

    wKioL1Rh3a6gQyy2AAHiFOf1mg4612.jpg

  1. DML操作

  2. 存储

使用ChangeTracking

在激活了该功能之后就到了使用它的时候了,在激活了该功能的数据库上会有一个版本计数器,然后每当在激活了变更追踪的表上执行DML操作的时候都会产生一个新的Version号与之关联,在某种程度上变更追踪的版本号与rowversion数据类型有些相似。

现在我们可以很容易的想象如何使用变更追踪的:

  1. 首先应用程序从数据库做一次初始数据的加载

  2. 然后获取当时的Version号并记录一下以作为下次数据抽取的起始点

  3. 然后当下次应用程序需要从数据库做增量数据抽取的时候,提供上次记录下来的Version号并仅仅加载新的改动

  4. 如果很不幸的,应用程序在上次增量完成之后到下次增量抽取之间变动信息被清除了,那么应用程序不得不重新做一次全数据加载以防止数据不一致

数据库提供了一下的函数来实现上面提到的功能:

1.      CHANGE_TRACKING_CURRENT_VERSION()

获取当下最新的变更的Version

2.      CHANGETABLE(CHANGES…)

该行集函数返回变更信息,它接受表明及Version号作为参数,然后从内部追踪变更信息的表中为该用户表返回从提供了Version号之后发生的所有变更信息

3.      CHANGE_TRACKING_MIN_VALID_VERSION()

该函数需要一个表的object_id,然后返回当前数据库中最小的有效Version号。应用程序在每次做增量抽取之前,应该判断上次加载的Version号是否小于当前有效的Version号,如果是的话意味着有些变更信息因为某些原因已经被清除掉了,这时候必须做一次全数据加载

 

 

 


SQL Server 之 - 变更追踪 2