视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用CDC捕获SQLSERVER数据变更
2020-11-09 10:17:51 责编:小采
文档


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

近期根据公司规划,需要将以前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的触发器的方式,在效率和方便性上有了极大的提高。

本文出自 “天知道的技术博客” 博客,请务必保留此出处

下载本文
显示全文
专题