sqlserver的數據更改捕獲CDC功能

一. CDC(Change Data Capture)原理
    異步讀取事務日誌,記錄DML操作發生的時間,類型和實際影響的數據變化,然後將這些數據記錄到啓用CDC時自動創建的表中。

二. 對比Trigger方式的實現
     由於是異步讀取的,因此對整體性能的影響不大,遠小於通過Trigger實現的數據變化記錄;


三. 應用方法

1. 數據庫啓用CDC
    Use test
    EXEC sys.sp_cdc_enable_db;

2. 啓用Agent

3. 表啓用CDC
    EXEC sys.sp_cdc_enable_table  
        @source_schema = N'dbo', 
        @source_name = N'tb',                       --跟蹤的表名
        @capture_instance = N'dbo_tb_col',  --本跟蹤的名字
        @role_name = NULL,
        @captured_column_list = N'id,col1,col2';   --需要跟蹤的列,如果不設置,則表示跟蹤所有列

4. 啓用CDC後,會創建的一些系統表
(1)cdc.captured_columns 
            記錄所有要跟蹤的列
(2)cdc.change_tables                    創建了跟蹤的表
(3)cdc.<capture_instance>_CT    實際記錄變更的表,每建立一個跟蹤,就會自動生成一張對應的表
                                                               

列名

描述

__$start_lsn

數據變動所屬的LSN

__$end_lsn

2012後才支持,2008中爲NULL

__$seqval

表示該變動,是事務中第幾行改動

__$operation

1 = delete

2 = insert

3 = update (old values)    Column data has row values before executing the update statement.

4 = update (new values)  Column data has row values after executing the update statement.

__$update_mask

表示某列是否改動過,對應bit1則有變動

所有要跟蹤的列

例如,該表有5個要跟蹤的列,那麼就有5

    
(4)cdc.ddl_history                        記錄DDL操作
(5)cdc.lsn_time_mapping            LSN及時間對應表

5. CDC是通過Agent實現的,因此在代理中會看到創建的作業
    

6. 主要的幾個相關係統函數
(1)sys.fn_cdc_get_min_lsn( 'capture_instance_name' )   
         sys.fn_cdc_get_max_lsn( 'capture_instance_name' )    返回要跟蹤的表的最大,最小 start_lsn 值
(2)cdc.fn_cdc_get_all_changes_<capture_instance> ( from_lsn , to_lsn , '<row_filter_option>' )   每一個變動返回一行
(3)cdc.fn_cdc_get_net_changes_<capture_instance> ( from_lsn , to_lsn , '<row_filter_option>' )  每一行變動返回一行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章