使用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的觸發器的方式,在效率和方便性上有了極大的提升。

相關文章
相關標籤/搜索