使用CDC捕获SQLSERVER数据变更

使用CDC捕获SQLSERVER数据变更,第1张

概述近期根据公司规划,需要将以前SQLSERVER数据库部分表中数据增量取到ORACLE数据库中,决定使用sqlserver2008中新增的CDC(变更数据捕获)功能来实现。 具体 *** 作步骤如下: 1. 查看指定数据库有没有启用CDC功能 SELECT is_cdc_enabled FROM sys.databases WHERE name = 'jointown' 2. 在数据库级启用CDC功能 EX

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

具体 *** 作步骤如下:

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

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


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

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


再次启用成功:

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

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

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

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

select * from cdc.dbo_t1_ct


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

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

总结

以上是内存溢出为你收集整理的使用CDC捕获SQLSERVER数据变更全部内容,希望文章能够帮你解决使用CDC捕获SQLSERVER数据变更所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1177958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存