如果利用SQL Server 2008新特性之CDC
2008-04-16 09:53:39 来源:WEB开发网要抽取已经启动CDC的表的改动,你需要提供相关的LSN。LSN是指在识别数据库事务处理日志里的条目的唯一日志序列号。如果这是你第一次进行查询抽取表改动,你可以使用函数sys.fn_cdc_get_min_lsn()和函数sys.fn_cdc_get_max_lsn()来获得最小LSN和最大LSN。如果在启动表的CDC时,设置@supports_net_changes=1,你可以使用cdc.fn_cdc_get_net_changes_dbo_customer()来查询净改动。这个函数会根据你启用CDC时指定的主键或唯一索引把多个改动集合到一行中。这样你可以随时调用cdc.fn_cdc_get_all_changes_dbo_customer()来获取表中序列号在LSN范围之内的任何改动。函数名称中的dbo_customer部分是数据捕捉实例;这是默认的schema_tablename。以下是上面的查询的结果:
第一组结果显示净改动;第二组结果显示各个改动。由于我们在开始时插入了一行,又删除了这一行,第一组结果没有显示这一行,因为它的序号在LSN范围里增添后又被删除了;也就是说,在你聚合这些改动的时候,这一行已经不存在了。__$operation列值是:1 =删除,2=插入,3=更改(更新前的值),4=更改(更新后的值)。要查看更新前的值,你必须传递“all update old”到函数cdc.fn_cdc_get_all_changes_dbo_customer()中。__$update_mask列用于识别改动过的列。当__$operation =1或2时,所有的列都被标识为改动过。当__$operation =3或4时,会指示出实际被改动过的列。所有的列都根据column_ordinal以二进制绘制显示;执行存储过程sys.sp_cdc_get_captured_columns,传递数据捕捉实例作为参数来查看column_ordinal值,例如:
更多精彩
赞助商链接