【问题标题】:Oracle: OALL8 is in an inconsistent stateOracle:OALL8 处于不一致状态
【发布时间】:2013-08-06 15:43:28
【问题描述】:

作为升级 JRun 的一部分,我们正在从 1.4 JVM 迁移到 1.6 JVM。现在我收到一个非常奇怪的 oracle db 错误:“OALL8 处于不一致状态”。我已经确定了插入根本不使用绑定变量的查询的问题 - 所有内联参数。如果我在没有任何绑定变量的情况下运行查询,则会收到上述错误。只要我用绑定变量替换其中一个硬编码值 - 一切都会正常工作。

另一个奇怪的地方是,在执行查询之后,它实际上是提交给数据库的。我可以从另一个会话连接并查看插入的行。我已经尝试将查询包装在事务中,它似乎成功了,因为没有显式事务的查询的行为没有改变。

以下是相关细节:

Java 版本:1.6.0_12-b04
虚拟机版本:11.2-b01(HotSpot 服务器)
Oracle 服务器:10.2.0.4
Oracle 客户端:11.1.0.7.0 到 ojdbc6.jar

更新: 我正在使用 cfqueryparam - 它们在 oracle 世界中被称为绑定变量。虽然这确实解决了眼前的问题,但我们有一个相当大的遗留代码库,我们实际上无法在从 CF7 升级到 CF8 的过程中遍历所有代码来更新查询。

即使我已经确定了一种失败的特定情况(并将其封装在 mxunit 测试中),但这并不意味着没有其他可能存在问题的领域。我真的很想有一个解决方案来消除 OALL8 错误,而不是围绕它进行编码。

更新 2: 在与我们的 DBA 核实后,他已将名为 CURSOR_SHARING 的参数设置为 SIMILAR。 Oracle 默认值为 EXACT。正在发生的事情是当 ColdFusion 将查询交给执行时,Oracle 将所有文字值转换为绑定变量,这似乎使 ColdFusion 感到困惑。将设置转回 EXACT 可以让文字查询正常工作。

更新 3: Oracle 终于向我们发布了 JDBC 的带外补丁。它被识别为 JDBC 错误。最新的驱动程序在最终更新时应该包含它。如果你有支持,你也可以通过他们的 TAR 系统请求补丁。

【问题讨论】:

    标签: java oracle jdbc coldfusion jrun


    【解决方案1】:

    那么...使用绑定变量?

    无论如何,您都应该使用它们(通过cfqueryparam)来确保安全,如果它解决了问题,那就更有理由这样做了。


    如果您对实际错误的含义感兴趣,谷歌有plentyofresults,表明这是JDBC驱动程序错误,甚至建议patch is available


    但是我在您的帖子中没有看到实际问题...?

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        如果你的应用在weblogic中运行,你应该复制ojdbc.jar到安装目录“weblogic81\server\lib”,覆盖同名文件。

        【讨论】:

          猜你喜欢
          • 2011-05-11
          • 1970-01-01
          • 2014-10-22
          • 1970-01-01
          • 2012-03-17
          • 2016-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多