一. CDC(Change Data Capture)原理
异步读取事务日志,记录DML操作发生的时间,类型和实际影响的数据变化,然后将这些数据记录到启用CDC时自动创建的表中。
二. 对比Trigger方式的实现
由于是异步读取的,因此对整体性能的影响不大,远小于通过Trigger实现的数据变化记录;
三. 应用方法
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 记录所有要跟踪的列
(1)cdc.captured_columns 记录所有要跟踪的列
(2)cdc.change_tables 创建了跟踪的表
列名 |
描述 |
__$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 |
表示某列是否改动过,对应bit为1则有变动 |
所有要跟踪的列 |
例如,该表有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,'<row_filter_option>' )
每一行变动返回一行
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。