Informix CDC API 错误
Posted
技术标签:
【中文标题】Informix CDC API 错误【英文标题】:Informix CDC API errors 【发布时间】: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
。这甚至不会显示给你。
谢谢乔纳森
【参考方案1】:
CDC 错误 -83702 是指 API 版本不匹配。由于您的 ESQL/C 版本是 3.50.FC5,我假设您的 Informix 服务器版本是 11.50.FC5。这使用 CDC API 的早期版本 (1.0),而来自 IBM Knowledge Center 的示例代码使用 API 版本 1.1。
可以通过将 Informix 服务器升级到 11.50.FC6 或更高版本来解决此问题。最新的 11.50 版本是 11.50.FC9W3。
【讨论】:
以上是关于Informix CDC API 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 中为 PHP 7 安装 PDO 驱动程序 Informix
Python - Informix - 字符到数字的转换错误 (-1213)