与Oracle连接到Informix的远程代理程序错误的RPC连接丢失

时间:2009-06-08 11:29:21

标签: oracle odbc informix

我遇到一个简单的数据导入器/更新程序的问题,它从Informix获取数据,将其插入Oracle中的表中,并更新原始表中的标志。设置是这个

Pro*C program calls a PL/SQL procedure
The procedure 
  opens a cursor on Informix, 
  loops through each row
    insert the data into an oracle table
    commit
    update the "new data" flag in Informix (i.e. stop a re-import)
    commit

这两个提交对于停止特定的Oracle错误是必要的(我忘记了哪一个,但这是因为正在更新的表在两个数据库中并且单个提交无法处理它)。 此代码适用于源表中的少量记录(5-10),但在有>时会丢失。 1000. Oracle日志目录中的警报日志显示错误“与远程代理程序的RPC连接丢失”。 Informix目录中没有相应的错误,所以我怀疑驱动程序有问题。我们在Red Hat上使用带有unixODBC驱动程序的Oracle 10.2。

有没有人对解决方法有任何想法,或者确实如何解决?似乎没有关于此错误消息的任何有用信息 - 大多数页面只是说“这不是Oracle问题”。

1 个答案:

答案 0 :(得分:1)

通常,COMMIT会关闭打开的游标。您可能需要在Informix上创建一个游标WITH HOLD(ESQL / C术语 - 您必须转换为ODBC)。由于缓冲,你可能会有几行工作;单个提取操作可​​能会从Informix中收集多个(可能超过10个)记录,并且只有当光标关闭时才返回数据库时才会发现问题。

作为一种解释,我对此并不十分满意; UPDATE加COMMIT应将光标标记为已关闭。

假设您使用的是Informix ODBC驱动程序(而不是Informix的其他供应商的ODBC驱动程序),那么您可以通过在程序启动之前在环境中设置SQLIDEBUG = 2:xyz来调试它。这应该产生一个名称以'xyz _ ###'开头的文件,其中'###'是一些数字系列,可能是十六进制数字。然后,sqliprint可以解释此文件。它将向您显示应用程序和Informix数据库服务器之间传递的信息 - 并且可能会向您显示通过网络发送的数据分组等。