知方可补不足~用CDC功能来对数据库变更进行捕捉

简介:

如果我们希望监视一个数据表的变化,在sql2008之前的版本里,在数据库端可能想到的只有触发器,或者在程序端通过监视自己的insert,update,delete来实现相应的功能,这种实现无疑是让我们感到恐惧的,不够灵活的,而当进行sql2008后,这种情况得到了本质的改变,sql2008为我们提供了CDC功能,它可以实时对指定的数据表进行监控,当前它同时对产生SQL的一些负载。

CDC工作流程

CDC功能主要捕获SQLServer指定表的增删改操作,由于任何操作都会写日志(哪怕truncate),所以CDC的捕获来源于日志文件。日志文件 会把更改应用到数据文件中,同时也会标记符合要求的数据标记为需要添加跟踪的项。然后通过一些配套函数,最后写入到数据仓库中。

CDC实现步骤

第一步、对目标库显式启用CDC:

在当前库使用sys.sp_cdc_enable_db。返回0(成功)或1(失败)。注意,无法对系统数据库和分发数据库启用该功能。且执行者需要用sysadmin角色权限。

该存储过程的作用域是整个目标库。包含元数据、DDL触发器、cdc架构和cdc用户。

使用以下代码启用:

USE tableName

Go

EXECUTE sys.sp_cdc_enable_db

GO
当设置好数据库的CDC功能后,我们可以查看一下是否已经设置成功
SELECT  IS_CDC_ENABLED ,
        CASE WHEN IS_CDC_ENABLED = 0 THEN 'CDC功能禁用'
             ELSE 'CDC功能启用'
        END 描述
FROM    SYS.DATABASES
WHERE   NAME = 'tableName'
 

同时,数据库的用户将会多了一个CDC用户

第二步、对目标表启用CDC

使用db_owner角色的成员执行sys.sp_cdc_enable_table为每个需要跟踪的表创建捕获实例。然后通过sys.tables目录视图中的is_tracked_by_cdc列来判断是否创建成功。

默认情况下会对表的全部列做捕获。如果只需要对某些列做捕获,可以使用@captured_column_list参数指定这些列。

如果要把更改表放到文件组里的话,最好创建单独的文件组(最起码与源表独立)。

 
EXEC sys.sp_cdc_enable_table @source_schema = 'DBO',
    @source_name = 'WebManageUsers', @role_name = NULL 

注意,source_schema说的是数据库架构者,如dbo,cdc等

@source_name说的就是数据表名,@role_name是角色名,为null表示对角色没有特别限制

当设置完成数据表的CDC功能后,我们看一下是否已经配置成功,用下面代码

SELECT  NAME ,
        IS_TRACKED_BY_CDC ,
        CASE WHEN IS_TRACKED_BY_CDC = 0 THEN 'CDC功能禁用'
             ELSE 'CDC功能启用'
        END 描述
FROM    SYS.TABLES
WHERE   OBJECT_ID IN ( OBJECT_ID('DBO.WebManageUsers') )

当我们对WebManageUsers表修改数据后,可以在DBO_WebManageUsers_CT表中查到相应的结果,从表名中可以看到,CDC表的命名规则是架构名_表名_CT,呵呵。

SELECT * FROM cdc.DBO_WebManageUsers_CT

从结果中我们可以看到,CDC对于update操作是进行了修改前和修改后的两次捕捉,非常清晰!
 
好了,对于数据库的CDC功能今天就说到这里,希望对各位有所帮助!
本文转自博客园张占岭(仓储大叔)的博客,原文链接:知方可补不足~用CDC功能来对数据库变更进行捕捉 ,如需转载请自行联系原博主。
目录
打赏
0
相关文章
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
19 0
让PolarDB更了解您--PolarDB云原生数据库核心功能体验馆
让PolarDB更了解您——PolarDB云原生数据库核心功能体验馆,由阿里云数据库产品事业部负责人宋震分享。内容涵盖PolarDB技术布局、开源进展及体验馆三大部分。技术布局包括云计算加速数据库演进、数据处理需求带来的变革、软硬协同优化等;开源部分介绍了兼容MySQL和PostgreSQL的两款产品;体验馆则通过实际操作让用户直观感受Serverless、无感切换、SQL2Map等功能。
118 7
数据管理服务DMS支持MySQL数据库的无锁结构变更
本文介绍了使用Sysbench准备2000万数据并进行全表字段更新的操作。通过DMS的无锁变更功能,可在不锁定表的情况下完成结构修改,避免了传统方法中可能产生的锁等待问题。具体步骤包括:准备数据、提交审批、执行变更及检查表结构,确保变更过程高效且不影响业务运行。
14 2
PolarDB开源数据库进阶课16 接入PostGIS全功能及应用举例
本文介绍了如何在PolarDB数据库中接入PostGIS插件全功能,实现地理空间数据处理。此外,文章还提供了使用PostGIS生成泰森多边形(Voronoi diagram)的具体示例,帮助用户理解其应用场景及操作方法。
16 0
时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级
TDengine 3.3.5.0 版本正式发布,带来多项更新与优化。新特性包括提升 MQTT 稳定性和高并发性能、新增 taosX 增量备份与恢复、支持 JDBC 和 Rust 连接器 STMT2 接口、灵活配置 Grafana Dashboard 等。性能优化涵盖查询内存管控、多级存储迁移、强密码策略等,全面提升时序数据管理的效率和可靠性。欢迎下载体验并提出宝贵意见。
49 5
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
597 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
数据库 校验名称唯一性,用于新增和修改功能
数据库 校验名称唯一性,用于新增和修改功能
80 8
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
247 9
数据库 校验名称唯一性,用于新增和修改功能
数据库 校验名称唯一性,用于新增和修改功能
70 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等