WEB开发网
开发学院数据库MSSQL Server 如果利用SQL Server 2008新特性之CDC 阅读

如果利用SQL Server 2008新特性之CDC

 2008-04-16 09:53:39 来源:WEB开发网   
核心提示: 要抽取已经启动CDC的表的改动,你需要提供相关的LSN,如果利用SQL Server 2008新特性之CDC(5),LSN是指在识别数据库事务处理日志里的条目的唯一日志序列号,如果这是你第一次进行查询抽取表改动,会指示出实际被改动过的列,所有的列都根据column_ordinal以二进制绘

要抽取已经启动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。以下是上面的查询的结果: 

如果利用SQL Server 2008新特性之CDC

第一组结果显示净改动;第二组结果显示各个改动。由于我们在开始时插入了一行,又删除了这一行,第一组结果没有显示这一行,因为它的序号在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值,例如: 

上一页  1 2 3 4 5 6  下一页

Tags:如果 利用 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接