数据仓库之启用cdc

时间:2023-03-09 07:13:41
数据仓库之启用cdc

准备工作: 先将sqlservere 代理服务启动

USE [MyDB];
GO
EXECUTE sys.sp_cdc_enable_db; --启用数据库对CDC的支持
GO

 -- 设置别名 @capture_instance = N'qy_zzqk', 生成你的cdc捕获表为 cdc.qy_zzqk_CT , 如果不设置@capture_instance,表名为 cdc.opr__tab_qy_zzqk_CT

EXEC sys.sp_cdc_enable_table 'opr_',
; --启用某个表对CDC的支持
GO

关闭 某个 cdc捕获

EXEC sys.sp_cdc_disable_table 'opr_', 'tab_qy_zzqk','All'

如果只只捕获一部分字段

EXEC sys.sp_cdc_enable_table 'opr_',
,@captured_column_list ='bjbh,bjrq,timeflag,wcbjsj'

 --启用某个表对CDC的支持
GO

对整个库进行cdc关闭

EXEC sys.sp_cdc_disable_db

2.cdc启用以后,可以在系统表中看到有一个对应表 [cdc].[opr__tab_qy_zzqk_CT]

编写指定的时间查询, 以查询对应时间段的数据

CREATE PROC GetCDCResult
(@begin_time DATETIME,@end_time DATETIME)
AS
), );
SELECT @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @begin_time);
SELECT @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);
SELECT * FROM [cdc].[opr__tab_qy_zzqk_CT] WHERE __$start_lsn BETWEEN @from_lsn AND @to_lsn
--调用该存储过程
EXEC GetCDCResult '2009-4-27','2009-4-29'

关于 operation  1删除; 2新增; 3修改之前;4修改之后

cdc的信息是从数据库日志里面读取的, 获取的数据稍微延迟了一下.