【问题标题】:Oracle OCI - fetch delays and failsOracle OCI - 获取延迟和失败
【发布时间】:2011-12-13 12:12:56
【问题描述】:

我有一个 Oracle OCI 程序,它在各种平台上投入生产:SLES Linux、Ubuntu、AIX、Solaris 和 HP-UX。我正在尝试在 Redhat 上运行相同的程序,但遇到了困难。

当使用可滚动光标(使用OCI_STMT_SCROLLABLE_READONLY 调用OCIStmtExecute)并使用执行二分搜索以获得确切结果集大小的函数时,问题似乎出现了。更一般地说,问题似乎是在读取结果集的末尾,在读取 OK 值之前。

我编写了一个测试实用程序,它执行一个必须返回 1 行的简单语句 (SELECT COUNT(*) FROM xxx)。然后它从结果集中检索数据:

如果我首先检索第 1 行,它工作正常。如果我超过了结果集的末尾,当我返回时它会继续正常工作。但是如果我的第一次检查是在结果集之后,一切都会出错:

> rdb_test 1
12:06:32.365 Checking row 1 - OK

> rdb_test 3
12:06:35.510 Checking row 3 - NO DATA
12:06:35.511 Checking row 2 - NO DATA
12:06:45.549 Checking row 1 - NO DATA

> rdb_test -3
12:06:49.344 Checking row 1 - OK
12:06:49.344 Checking row 3 - NO DATA
12:06:49.345 Checking row 2 - NO DATA
12:06:49.345 Checking row 1 - OK

还有一个奇怪的延迟,在上面的例子中是 10 秒,而它检索应该没问题的行。在调试器中,这在 OCIStmtFetch2 函数的深处——不出所料的是在等待服务器响应的 __read_nocancel 函数中。

以前有没有其他人见过这个问题?

【问题讨论】:

    标签: oracle rdbms oracle-call-interface


    【解决方案1】:

    问题似乎与版本 11 OCI 库有关。我刚刚尝试了 v10 库,它似乎又可以正常工作了。不幸的是,这需要旧版本的 C++ 标准库,所以如果有替代方案,我仍然希望避免此修复。

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 2014-10-28
      • 2012-05-12
      • 2019-12-23
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多