使用CDC捕获SQLSERVER数据变更

近期根据公司规划,需要将以前SQLSERVER数据库部分表中数据增量取到ORACLE数据库中,决定使用sqlserver2008中新增的CDC(变更数据捕获)功能来实现。

具体操作步骤如下:

1. 查看指定数据库有没有启用CDC功能 
SELECT is_cdc_enabled FROM sys.databases WHERE name = 'jointown' 
clip_image001

2. 在数据库级启用CDC功能 
EXEC sys.sp_cdc_enable_db 
clip_image002 
clip_image003

3. 创建一个测试表 
create table t1 (id int,name varchar(20));

4. 在测试表上启用CDC 
EXEC sys.sp_cdc_enable_table

@source_schema = 'dbo',

@source_name = 't1',

@role_name = NULL,

@capture_instance = NULL,

@supports_net_changes = 1,

@index_name = NULL,

@captured_column_list = NULL,

@filegroup_name = default 
clip_image005

执行时报错,需要在表中设置主键或唯一键

clip_image006 
再次启用成功: 
clip_image007

5. 提醒:若要CDC能正常工作,除了以上配置外,需要开启agent服务!

6. 检查指定表上CDC是否已经启用 
SELECT is_tracked_by_cdc FROM sys.tables WHERE name = 't1' and schema_id = SCHEMA_ID('dbo') 
clip_image009

7. 此时查看变更数据捕获表,根据之前建的表t1,对应的存放变更数据的表为cdc.dbo_t1_ct,表中暂无任何数据 
clip_image010

8. 在t1表中分别插入与更改一条数据后再查看 
insert into t1 values (1,'a');

select * from cdc.dbo_t1_ct 
clip_image012clip_image014 
在跟踪表中可以看到源表数据插入已被捕获,相比原表而言,cdc表中新增了五列,一般我们额外需要关注的主要是__$start_lsn与__$operation 这两列,前一列存放此操作对应的数据库lsn号,后一列存放当前操作类型,以下为__$operation列对应操作类型: 
1=delete, 
2=insert, 
3=update(旧值), 
4=update(新值)。

通过以上操作可以看到,配置CDC过程本身来说是比较简单的,可以很方便的在对应的CDC表中跟踪到原表所做的数据操作,有了这些跟踪的数据后相应的开发人员就可以很方便的将sqlserver中源库和表中的数据捕获后同步到对应的其它库中,相比原来2005的触发器的方式,在效率和方便性上有了极大的提高。





     本文转自ttzztt 51CTO博客,原文链接:http://blog.51cto.com/tianzt/933681,如需转载请自行联系原作者






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值