• 数据仓库之启用cdc


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

    USE [MyDB];
    GO
    EXECUTE sys.sp_cdc_enable_db; --启用数据库对CDC的支持
    GO
    
     -- 设置别名 @capture_instance = N'AAAA', 生成你的cdc捕获表为 cdc.AAAA_CT , 如果不设置@capture_instance,表名为 cdc.dbo_AAAA_CT
    
    EXEC sys.sp_cdc_enable_table 'dbo', 
    'tab_AAAA', @role_name = NULL,@capture_instance = N'AAAA', @supports_net_changes =0; --启用某个表对CDC的支持
    GO

    关闭 某个 cdc捕获 

    EXEC sys.sp_cdc_disable_table 'dbo', 'tab_AAAA','All'

     如果只只捕获一部分字段

    EXEC sys.sp_cdc_enable_table 'opr_', 
    'tab_BBBB', @role_name = NULL, @supports_net_changes =0,@capture_instance = N'BBBB',
    @captured_column_list ='a,b,c,d,timeflag'

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

    对整个库进行cdc关闭

    EXEC sys.sp_cdc_disable_db

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

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

    create PROC GetCDCResult
    (@begin_time DATETIME,@end_time DATETIME,@cdcTableName varchar(100))
    AS
    DECLARE @from_lsn binary(10), @to_lsn binary(10);
    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);
    
    declare @sqlStr nvarchar(2000)
    set @sqlStr = N'SELECT * FROM [cdc].['+@cdcTableName+'] WHERE __$start_lsn BETWEEN @from_lsn AND @to_lsn';
    exec sp_executesql @sqlStr,N'@from_lsn binary(10),@to_lsn binary(10)',@from_lsn,@to_lsn ;
    
    go
    --调用该存储过程
    EXEC GetCDCResult '2001-01-1','2020-01-01','BBBB_CT'

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

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

  • 相关阅读:
    autodl3配置深度学习环境
    autodl使用2配置环境
    20220723图生成模型腾讯AI徐挺洋老师(分子生成)
    加班
    打比赛
    错过了一个比较大的编程比赛
    胡思乱想
    没有太复杂
    张远陆虎给从前的自己
    我还是会想
  • 原文地址:https://www.cnblogs.com/mjxxsc/p/5546479.html
Copyright © 2020-2023  润新知