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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章