使用CDC捕获SQLSERVER数据变动

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

具体操做步骤以下:数据库

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

2. 在数据库级启用CDC功能
EXEC sys.sp_cdc_enable_db
clip_p_w_picpath002
clip_p_w_picpath003sqlserver

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

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

@source_schema = 'dbo',blog

@source_name = 't1',ip

@role_name = NULL,开发

@capture_instance = NULL,get

@supports_net_changes = 1,

@index_name = NULL,

@captured_column_list = NULL,

@filegroup_name = default
clip_p_w_picpath005

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

clip_p_w_picpath006
再次启用成功:
clip_p_w_picpath007

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

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

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

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

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

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

相关文章
相关标签/搜索