Gbase+8s+数据捕获接口使用方法_第1页
Gbase+8s+数据捕获接口使用方法_第2页
Gbase+8s+数据捕获接口使用方法_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Gbase 8s 数据捕获接口使用方法1 Change Data Capture API简介Change Data Capture API 使外部的客户端程序能够捕获GBase 8s的事务数据。用户可以在各种客户端程序上使用这套接口,例如JDBC, ODBC, ESQL/C, and DB-Access。接口以智能大对象的形式返回CDC记录,用户可以使用智能大对象读取函数读取CDC数据。用户根据自己的应用可以决定如何处理这些数据。例如,可以编写一个程序将Gbase 8s数据库中的数据复制到另外一个数据库上。在开始捕获一个表的数据时,Change Data Capture API输出了表的结构信

2、息,用户可以使用这些信息去创建一个表。当数据捕获开始以后,表结构变化时将不再提供新的表结构数据。Change Data Capture API仅提供变化的数据,它不提供数据库内容的初始快照。如果用户需要迁移一个表,可以通过其它方式复制现有数据。然后再使用Change Data Capture API在新表上进行数据更新。只有当数据库的日志打开时,Change Data Capture API才能够正常工作。2 Change Data Capture API使用方法2.1 准备工作在使用CDC API之前需要做一些准备工作:1. 在需要进行CDC的数据库上打开日志开关。2. 执行$INFORMI

3、XDIR/etc目录下的syscdcv1.sql脚本,它会创建syscdcv1数据库,并在syscdcv1数据库中创建若干表和函数。3. 确认syscdcv1.sql脚本成功创建syscdcv1数据库。4. 设置环境变量DB_LOCALE,使它和需要进行CDC的数据库的本地化(locale)设置相同。2.2 CDC API的基本使用方法使用CDC需要如下基本步骤:1. 使用informix用户连接到syscdcv1数据库(准备工作中创建的)。2. 调用cdc_opensess()函数,cdc_opensess()函数会返回一个session ID。3. 调用cdc_set_fullrowlog

4、ging()函数打开full-row logging。每个需要捕获的表都要调用一次。4. 调用cdc_startcapture()通知数据库需要捕获哪些表(数据名+表名)和哪些列需要捕获。每个表需要调用一次。5. 调用dc_activatesess()函数启动数据库捕获过程。6. CDC数据通过智能大对象返回。需要通过智能大对象读取函数例如mi_lo_read()进行读取。使用session ID作为智能大对象的文件描述符参数。7. 解析智能大对象中返回的数据。在Java程序中可以使用IfxToJavaType类将一个byte stream转换为java的类和类型。8. 为每一个表调用一次cd

5、c_endcapture()函数。9. 为每一个表调用一次dc_set_fullrowlogging()函数,关闭full-row logging。10. 调用cdc_closesess()关闭CDC的session。注意: CDC数据中在开头会包含表结构信息,需要按照CDC_REC_TABSCHEMA的格式进行解析。解析之后可以获得表的字段组成,和各个字段的排列顺序,这将在解析CDC_REC_INSERT / CDC_REC_UPDBEF / CDC_REC_UPDAFT / CDC_REC_DELETE类型记录时使用到。具体示例参见4.3节。2.3 CDC记录基本格式每条CDC记录通常由以

6、下几个部分构成:Common header.Record-specific headerRecord-content1. Common header. 所有的CDC记录都是相同的。Common header 中的Record number字段用来表明当前记录的记录类型,需要使用Record number字段的值到syscdcv1数据库syscdcrectypes表中去匹配recnum字段。根据匹配到的记录中的recname字段可以获取当前记录的类型。例如是CDC_REC_INSERT还是CDC_REC_UPDBEF。2. Record-specific header这一部分根据CDC记录类型的

7、不同而有着不同的格式。3. Record-content通常这一部分包含着数据变化部分内容。对于CDC_REC_INSERT / CDC_REC_UPDBEF / CDC_REC_UPDAFT / CDC_REC_DELETE,内容由以下几部分组成:a. 可变长度列的长度如果记录中存在可变长度列的内容,每个列将对应4个字节的长度说明。这些长度说明的顺序与CDC_REC_TABSCHEMA记录中列的排列顺序相同。b. 固定长度列数据如果记录存在固定长度列的内容,这些列将按照CDC_REC_TABSCHEMA记录中列的排列顺序出现。具体数据格式参见第6.1节。c. 可变长度列数据如果记录存在可变长

8、度列的内容,这些列将按照CDC_REC_TABSCHEMA记录中列的排列顺序出现。具体数据格式参见第6.2节。举例说明:数据库使用如下语句创建:Create table table1(a int, b varchar, c int);CDC会话开始之后会首先收到一个CDC_REC_TABSCHEMA记录(表中数据为16进制数据):00 00 00 24 00 00 00 26 00 00 00 42 00 00 00 c800 00 00 00 00 00 00 00 00 00 00 08 00 00 00 0200 00 00 01 61 20 69 6e 74 65 67 65 72 2

9、c 20 6320 69 6e 74 65 67 65 72 2c 20 62 20 76 61 72 6368 61 72 28 32 30 2c 30 29 00其中红色的部分是Common header. 最开始4个字节表明Common header和Record-specific header的合计长度是0x24(红色和绿色的部分的长度,因为Common header固定为16个字节,因此Record-specific header长度为20)。接下来的4个字节说明记录内容长度是0x26(黑色部分). 用户根据最后4个字段00 00 00 c8到syscdcrectypes表中去查询r

10、ecnum等于0xc8的记录,该条记录的recname为CDC_REC_TABSCHEM。我们就可以知道这是一条CDC_REC_TABSCHEMA记录。绿色的部分是Record-specific header。接下来就可以根据参考文献【1】中的说明来解析绿色的Record-specific header部分。最开始的4个字节是在调用cdc_startcapture()函数时传入的User Data,它可以用来区分不同的表。接下来的4个字节必须为0。再接下来的4个字节说明固定长度字段占用了8个字节(两个int字段)。再接下来的4个字节说明有2个固定长度列。再接下来的4个字节说明有1个可变长度列。

11、最后黑色部分是各个字段的类型说明(ascii字符):a integer, c integer, b varchar(20,0) 。请注意这里的字段排列顺序。当执行插入数据操作:insert into table1 values(6,hello,8); 之后会收到CDC_REC_INSERT记录(事务相关CDC记录在这里不做介绍)00 00 00 28 00 00 00 0e 00 00 00 42 00 00 00 2800 00 00 17 00 ab 80 bc 00 00 00 09 00 00 00 0800 00 00 00 00 00 00 06 00 00 00 06 00 00 00 0805 68 65 6c 6c 6f其中红色的部分是Common header.绿色部分是Record-specific header,前8个字节为Sequence number,接下来的4个字节为Transacti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论