gbase8s cdc协议解析
什么是cdc
cdc全称是Change Data Capture,是一种捕获增量数据的技术统称,目前主要应用在捕获数据库数据变更的技术。
如何使用
不同数据库应用厂商实现方式也不尽相同,如下提供gbase8s数据库使用cdc基本步骤
1 以gbasedbt用户 创建syscdcv1系统库
cd $GBASEDBTDIR/etc
dbaccess - syscdcv1.sql
2 运行 cdc_opensess函数,该函数返回一个会话标识
3 运行cdc_set_fullrowlogging函数,该函数对需要捕获的表开启整行日志记录
4 运行cdc_startcapture 函数指定要捕获哪些数据
5 运行cdc_activatesess 函数开启捕获进程,捕获到的数据则会返回至应用程序
6 解析数据
7 运行cdc_endcapture()函数停止捕获
8 运行cdc_set_fullrowlogging() 函数解除整行日志
9 运行cdc_closesess()函数关闭捕获会话
协议解析,如下测试程序完成上述的准备后开始进行数据捕获
第一行协议整理如下
00000024 4字节 cdc 记录标题的字节数
0000001D 4字节
00000042 4字节 分包方案号,固定为66
000000C8 4字节 cdc记录号 代表 具体的操作,存储于cdc 系统库下的syscdcrectypes 表 主要包括插入、删除、修改、事务开始、事务提交、truncate等等
c8对应的操作为CDC_REC_TABSCHEM 描述信息
0000006F 4字节 捕获表的唯一标识,在调用接口的时候指定
00000000 4字节 必须为0
00000004 4字节 表中固定长度列大小 此次测试为create table t1(c1 int,c2 varchar(10))
00000001 4字节 固定长度列数量
00000001 4 字节 可变长度列数量63312069 不定字节 表的描述信息
6E746567
65722C20
63322076
61726368
61722832
302C3029
00000000
第二列
00000018 4字节 cdc 记录标题的字节数
00000000 4字节 有效内容长度
00000042 4字节 分包方案号,固定为66
000000C9 4字节 cdc记录号 c9 对应为超时 CDC_REC_TIMEOUT ,即没有新的数据变化
00000000 8字节 检索数据序号 因没有新数据 为0
00000000
后方的数据为上次buffer 中的脏数据
00000004
00000001
0000000163312069
6E746567
65722C20
63322076
61726368
61722832
302C3029
00000000
第三列 同第二列 超时操作
此时在数据库后台执行 insert into t1 values(15,'abcabcabc');
第四列
00000028 4字节 cdc 记录标题的字节数
00000000 4字节 有效内容长度
00000042 4字节 分包方案号,固定为66
00000001 4字节 cdc记录号 01 对应 CDC_REC_BEGINTX 即 事务开始
0000000B01746018 8字节 记录的需要
00000027 4字节 事务标识
0000000067DFE90F 8字节 事务开始时间 格式为时间戳
000007D5 操作系统用户标识 gbase8s数据库 管理员用户为 gbasedbt 该用户为操作系统用户 7D5 --> 2005 对应操作系统该用户的id6E746567 后方的数据为上次buffer 中的脏数据
65722C20
63322076
61726368
61722832
302C3029
第五列
00000028 4字节 cdc 记录标题的字节数
0000000F 4字节 有效内容长度
00000042 4字节 分包方案号,固定为66
00000028 4字节 cdc记录号 28 对应 CDC_REC_INSERT 即插入数据
0000000B01746050 8字节 与insert相关的序号
00000027 4字节 事务标识
0000006F 4字节 捕获表的唯一标识,在调用接口的时候指定
00000000 4字节 保留0B000000 4字节 暂时未知,猜测标识该列的数据类型
0000000F 4字节 int 列的值 本次测试为 15
0009 2 字节 ,标识可变列的数据长度
616263616263616263 不定长度 ,可变列的值 insert into t1 values(15,'abcabcabc');68617228 后方的数据为上次buffer 中的脏数据
32302C3029
第六列
00000024 4字节 cdc 记录标题的字节数
00000000 4字节 有效内容长度
00000042 4字节 分包方案号,固定为66
00000002 4字节 cdc记录号 02 对应 CDC_REC_BEGINTX 即提交事务0000000B017460A0 8字节 记录的序号
00000027 4字节 事务标识
0000000067DFE90F 8字节 事务提交时间 格式为时间戳0B000000 后方的数据为上次buffer 中的脏数据
0000000F
00096162
63616263
61626368
61722832
302C3029
以上为一个简单的 数据插入的捕获流程
开启捕获时
先进行CDC_REC_TABSCHEM 操作,该操作主要返回了一些信息,比如 捕获列的信息,数据类型为变长或者固定长度等
然后进入CDC_REC_BEGINTX 操作 事务开启,记录了事务号,开始时间等
随后就是一些数据的操作 本次测试为 CDC_REC_INSERT
最后进入 CDC_REC_BEGINTX 提价本次事务
了解cdc的基本协议以及操作后,可以实现一些异构数据库的数据实时流转
更多cdc 相关材料,请联系gbase官方技术支持