我遇到一个简单的数据导入器/更新程序的问题,它从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问题”。
答案 0 :(得分:1)
通常,COMMIT会关闭打开的游标。您可能需要在Informix上创建一个游标WITH HOLD(ESQL / C术语 - 您必须转换为ODBC)。由于缓冲,你可能会有几行工作;单个提取操作可能会从Informix中收集多个(可能超过10个)记录,并且只有当光标关闭时才返回数据库时才会发现问题。
作为一种解释,我对此并不十分满意; UPDATE加COMMIT应将光标标记为已关闭。
假设您使用的是Informix ODBC驱动程序(而不是Informix的其他供应商的ODBC驱动程序),那么您可以通过在程序启动之前在环境中设置SQLIDEBUG = 2:xyz来调试它。这应该产生一个名称以'xyz _ ###'开头的文件,其中'###'是一些数字系列,可能是十六进制数字。然后,sqliprint
可以解释此文件。它将向您显示应用程序和Informix数据库服务器之间传递的信息 - 并且可能会向您显示通过网络发送的数据分组等。