SQL Server 之 - 变更追踪 2
正如前面文章说道的,SQLServer 2008提供了两种实现变更追踪的功能,本部分主要讨论的是Change Tracking功能。
激活ChangeTracking
我们可以通过如下的步骤来激活和使用ChangeTracking功能:
1. 在数据库级别激活Change Tracking
使用下面的语句在数据库上激活该功能(或者在SSMS的属性弹出框中激活),它的两个参数分别表示变更信息的存活时间以及是否激活自动清除变更信息任务:
2. 在需要的表上激活Change Tracking
我们需要在每个想追踪变更的表上执行激活(需要注意的是,表必须具有主键才可以使用变更追踪功能),可以使用如下的语句或使用表属性弹出框:
其中参数TRACK_COLUMNS_UPDATED默认为False,因为维护列更新信息需要额外的存储开销。
3. 理解Change Tracking带来的开销
开启了Change Tracking会对数据库操作产生一些影响,我们可以从管理操作、DML操作及存储方面来查看它们具体的影响:
管理操作
DML操作
存储
使用ChangeTracking
在激活了该功能之后就到了使用它的时候了,在激活了该功能的数据库上会有一个版本计数器,然后每当在激活了变更追踪的表上执行DML操作的时候都会产生一个新的Version号与之关联,在某种程度上变更追踪的版本号与rowversion数据类型有些相似。
现在我们可以很容易的想象如何使用变更追踪的:
首先应用程序从数据库做一次初始数据的加载
然后获取当时的Version号并记录一下以作为下次数据抽取的起始点
然后当下次应用程序需要从数据库做增量数据抽取的时候,提供上次记录下来的Version号并仅仅加载新的改动
如果很不幸的,应用程序在上次增量完成之后到下次增量抽取之间变动信息被清除了,那么应用程序不得不重新做一次全数据加载以防止数据不一致
数据库提供了一下的函数来实现上面提到的功能:
1. CHANGE_TRACKING_CURRENT_VERSION()
获取当下最新的变更的Version号
2. CHANGETABLE(CHANGES…)
该行集函数返回变更信息,它接受表明及Version号作为参数,然后从内部追踪变更信息的表中为该用户表返回从提供了Version号之后发生的所有变更信息
3. CHANGE_TRACKING_MIN_VALID_VERSION()
该函数需要一个表的object_id,然后返回当前数据库中最小的有效Version号。应用程序在每次做增量抽取之前,应该判断上次加载的Version号是否小于当前有效的Version号,如果是的话意味着有些变更信息因为某些原因已经被清除掉了,这时候必须做一次全数据加载
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。