【发布时间】:2017-07-29 22:59:18
【问题描述】:
我在尝试运行 Informix CDC api 时遇到错误。
我将代码 https://www.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/com.ibm.cdc.doc/ids_cdc_060.htm 复制到 cdcapi_INFORMIX.ec 中
以 informix 用户登录运行,我收到错误 CDC_ERRORCODE = CDC_E_APIVERS 我在编译程序时收到了一些警告,但它编译成程序 CDCEXE。但似乎不起作用。谁能给我一些指点
check_version csdk 当前安装版本:3.50.FC5
ifx_getversion dmi IBM/Informix-Client SDK 版本 3.50.FC5
ifx_getversion esql IBM/Informix-Client SDK 版本 3.50.FC5 IBM/Informix 嵌入式 SQL 用于 C 版本 3.50.FC5 版权所有 (C) 1991-2009 IBM
esql -g -static -o CDCEXE cdcapi_INFORMIX.ec /opt/inf/sdk/lib/dmi/libdmi.a “cdcapi_INFORMIX.ec”,第 492 行: 警告 #2223-D:声明了函数“ldlong” 含蓄地 c_int8.data[0] = ldlong(databuf+INT8_LO_OFFSET); ^
“cdcapi_INFORMIX.ec”,第 558 行:警告 #2223-D:函数“ldbigint” 宣布 含蓄地 ldbigintx(&c_bigint, databuf); ^
“cdcapi_INFORMIX.ec”,第 587 行:警告 #2223-D:函数“lddecimal” 宣布 含蓄地 lddecimal(databuf,coldesc.colobj[col].colsize,&c_decimal); ^
“cdcapi_INFORMIX.ec”,第 687 行:警告 #2223-D:函数“rtypsize” 宣布 含蓄地 colsize = rtypsize(sqlda->sqlvar[col].sqltype, ^
“cdcapi_INFORMIX.ec”,第 747 行:警告 #2223-D:函数“ldlong” 宣布 含蓄地 lsn_hi = ldlong(databuf + TRUNCATE_LSN_HI_OFFSET); ^
“cdcapi_INFORMIX.ec”,第 778 行:警告 #2223-D:函数“ldlong” 宣布 含蓄地 tabid = ldlong(databuf+TABSCHEMA_USERDATA_OFFSET); ^
“cdcapi_INFORMIX.ec”,第 873 行:警告 #2223-D:函数“ldlong” 宣布 含蓄地 lsn_hi = ldlong(databuf + TXN_LSN_HI_OFFSET); ^
“cdcapi_INFORMIX.ec”,第 908 行:警告 #2223-D:函数“ldlong” 宣布 含蓄地 lsn_hi = ldlong(databuf + DISCARD_LSN_HI_OFFSET); ^
“cdcapi_INFORMIX.ec”,第 947 行:警告 #2223-D:函数“ldlong” 宣布 含蓄地 lsn_hi = ldlong(databuf + IUD_LSN_HI_OFFSET); ^
“cdcapi_INFORMIX.ec”,第 1019 行:警告 #2223-D:函数“ldlong” 宣布 含蓄地 cur_log_header.ch_size_hdr = ldlong(a_recordbuf); ^
“cdcapi_INFORMIX.ec”,第 1342 行:警告 #2549-D:变量“recptr”是 用过的 在设置其值之前 memcpy(databuf, recptr, bytes_left_over_in_previous_buf); ^
“cdcapi_INFORMIX.ec”,第 1387 行:警告 #2223-D:函数“ldlong” 宣布 含蓄地 hdrsize = ldlong(recptr);
程序运行为
./CDCEXE -D db1 -T "bill.t1" -C "a,b" -T t2 -C "a,c" INFORMIXSERVER [server1] 连接到 syscdcv1@server1 CDC_OPENSESS for server1 server1 超时 300 Max recs per read 1
CDC API“cdc_opensess”在 cdcapi_INFORMIX.ec:1277 失败。 CDCAPI_RETVAL = -83702, CDC_ERRORCODE = CDC_E_APIVERS CDC 错误描述为 请求的 CDC API 行为版本无效或不受支持。
读取的总缓冲区数:0 提取的总记录数:0 平均每条记录数 缓冲区:0.000000
【问题讨论】:
-
请注意,您的机器上应该有
$INFORMIXDIR/demo/cdc/cdcapi.ec,它应该包含随您的软件提供的代码,因此应该可以与您的软件一起使用。编译警告不是很令人满意。修复它们比看起来更难。函数lddecimal()在$INFORMIXDIR/incl/public/decimal.h中声明,但不在$INFORMIXDIR/incl/esql/decimal.h中声明,原因我无法理解。同样,函数ifxcdc_valisnull()是$INFORMIXDIR/incl/public/sqlhdr.h,但不是$INFORMIXDIR/incl/esql/sqlhdr.h。这甚至不会显示给你。 -
谢谢乔纳森
标签: informix transactional-replication oracle-cdc