日期:2014-05-18  浏览次数:20531 次

SQL Server的数据更新跟踪测试
最近一个项目中需要监测SQLServer数据库中某些表的数据更新情况,于是做了一番POC测试和简单性能的评估.这里使用的是 SQLServer2008的更改跟踪.因为需求原因,没有考虑使用进一步的变更数据捕获.

测试内容在blog中
http://blog.csdn.net/jinjazz/archive/2010/04/17/5495955.aspx

大致脚本如下:
SQL code
 Use  master

go

/***

1 、建立测试环境:生成一个带主键的测试表 T_Trace

*/

if ( DB_ID ( 'db_Trace_test' ) is not null ) drop database db_Trace_test

go

Create DataBase db_Trace_test

go

use db_Trace_test

go

Create Table T_Trace ( id int not null , name varchar ( 100 )

CONSTRAINT [ PK_T_Trace ] PRIMARY KEY CLUSTERED ( [ id ] ASC )

)

go

/***

2 、配置数据库和表的更改跟踪参数

*/

ALTER DATABASE db_Trace_test SET

    CHANGE_TRACKING = ON (

            AUTO_CLEANUP = ON ,            -- 打开自动清理选项

            CHANGE_RETENTION = 1 HOURS    -- 数据保存期为时

    );



ALTER TABLE dbo . T_Trace ENABLE CHANGE_TRACKING

go

/***

3 、向表中增加修改删除数据

*/

insert into T_Trace values ( 1 , ' 上海 ' ),( 2 , ' 北京 ' ),( 3 , ' 广州 ' )

delete from T_Trace where id = 3


update T_Trace set name = ' 天津 ' where id = 1 

 /***

4 、获取更改过的数据

*/

SELECT

    CHG . Sys_Change_Version as 序列 , id as 主键 , Sys_change_Operation as 操作

FROM CHANGETABLE ( CHANGES dbo . T_Trace , 0 ) CHG

order by CHG . Sys_Change_Version

/* 






其中,测试脚本中函数 CHANGETABLE 的第二个参数 0 代表查询开始的事物操作序列,这三条数据分别表示两个插入( I )和一个删除( D )操作并且用主键 ID 标识出来。





------解决方案--------------------
sf
------解决方案--------------------
学习..
------解决方案--------------------
CHANGETABLE哪来的?
------解决方案--------------------
探讨
CHANGETABLE哪来的?

------解决方案--------------------
学习..
------解决方案--------------------
学习。。
------解决方案--------------------
探讨
很久很久没写blog了。。。

------解决方案--------------------

------解决方案--------------------

------解决方案--------------------
收藏学习了...
------解决方案--------------------
MARK and STUDY
------解决方案--------------------
学习。。
------解决方案--------------------
kan kan
------解决方案--------------------
顶了再看
------解决方案--------------------
功能不错
------解决方案--------------------
.....................................
------解决方案--------------------
收藏学习了...
------解决方案--------------------

------解决方案--------------------
呵呵,学习学习!!

------解决方案--------------------
学习了.
------解决方案--------------------
学习
------解决方案--------------------