1

我遇到了一个简单的数据导入器/更新器的问题,它从 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 上使用 Oracle 10.2 和 unixODBC 驱动程序。

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

4

1 回答 1

1

通常,COMMIT 会关闭打开的游标。您可能需要将 Informix 上的光标设置为 WITH HOLD 光标(ESQL/C 术语 - 您必须转换为 ODBC)。由于缓冲,您可能会得到几行工作;单个 fetch 操作可能会从 Informix 收集多条(可能超过 10 条)记录,并且您只有在需要返回数据库以获取更多信息时才注意到问题 - 当游标关闭时。

我对此并不完全满意。UPDATE 加 COMMIT 应该将游标标记为关闭。

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

于 2009-06-08T20:47:17.653 回答