KFS支持Gbase8s增量解析调研
关键字:
Kingbase FlySync、Gbase8s、增量解析
Gbase8s数据库CDC中的sessionId
sessionID验证:sessionID与时间无关,取决于连接。
1、在同一次连接中,第一次opensession获取sessionID,如果不进行closesess,再次获取会失败,只有进行closesess关闭session才能再次opensession获取sessionID,且在同一个连接中,每次获取的sessionID相同。
2、在不同的连接中,每次获取的sessionID不同,且每次获取连接,无需在上一次连接中执行closesess,即可执行opensession获取新的session。
CDC执行流程中的关键步骤
- cdc_opensession---实例级别的函数,cdc开始时执行一次
2、cdc_cdc_set_fullrowlogging()---表级别的函数,相当于一个开关为每张表打开一次即可,只要不关闭,则下次连接时可以不用执行开启。尽管功能和应用级别不同,但从本质上讲上述两种方法都属于cdc执行的开关函数。
3、cdc_startcapture()表级别的函数,在对每一个要进行cdc的表执行cdc之前必须执行一次,在执行期间可以通过cdc_endcapture()函数结束该表的cdc。在系统出现中断或执行结束后,下次开启对该表的cdc时,必须重新执行一遍,无论在上次cdc执行结束前是否执行了cdc_endcapture()。cdc_startcapture()属于cdc执行的设置函数,表示开始在指定列上进行cdc,如果捕获会话处于打开状态且处于活动状态(已经运行了cdc_activatesess() 函数),则数据捕获将立即在指定表中的指定列上开始。否则,数据捕获将在激活打开捕获会话时开始。
4、cdc_activatesess()函数表示开始执行cdc,用于指定开始进行cdc解析的LSN,可以与cdc_startcapture()交换位置执行。
综上:每次执行cdc进行解析时,需要先执行激活捕获会话,指定开始解析的LSN,并且启动捕获,设置需要捕获的列。
增量解析支持情况RECORD结构
1、CDC记录包含三个部分,分别是:Common header、Record-specific header、Record-content
Common header:所有CDC 记录共用的标题,描述了CDC记录的大小和类型
Header size : 4字节 记录Common header和Record-specific header的总长度
Palyload size: 4字节 记录header后数据的长度
Packet schema: 4字节 记录CDC数据包方案,定义了数据捕获和传输是使用的数据包格式和结构,在syscdcpacketschemes系统表中只存在一种数据包方案66, CDC_PKTSCHEME_LRECBINARY,因此这4个字节一直为00 00 00 66
Record number: 4字节 记录CDC记录号,CDC记录和对应的记录号存储在syscdcrectypes
Record-specific header:描述了不同CDC记录(举例begin、commit、delet)
CDC_REC_BEGINTX:指示事务开始
Sequence number: 8字节 记录当前CDC记录的LSN号
Transaction ID : 4字节 事务ID
start time: 8字节 事务开始时间
User ID: 4字节 开启事务的用户ID
CDC_REC_COMMTX:指示事务已提交
Sequence number: 8字节 记录当前CDC记录的LSN号
Transaction ID : 4字节 事务ID
Commit time: 8字节 事务提交时间
CDC_REC_DELETE:记录CDC删除操作
Sequence number: 8字节 记录当前CDC记录的LSN号
Transaction ID : 4字节 事务ID
User data: 4字节 传递给cdc_startcapture()函数并存储在syscdtabs表中的表的唯一标识
Flags: 4字节 预留位 4、日志保存时间
RECORD种类
CDC_REC_BEGINTX: 事务开始
CDC_REC_COMMTX: 事务提交
CDC_REC_RBTX: 事务回滚
CDC_REC_INSERT: 插入记录
CDC_REC_DELETE: 删除记录
CDC_REC_UPDBEF: 更新前项
CDC_REC_UPDAFT: 更新后项
CDC_REC_DISCARD: 事务无效记录(回滚到保存点等)
CDC_REC_TRUNCATE: truncate
CDC_REC_TABSCHEM: 数据库元信息
CDC_REC_TIMEOUT: 事务超时
CDC_REC_ERROR: 错误记录
参考资料
《GBase 8s V8.8 数据变更捕获(CDC)API_程序员指南》