当前位置:  开发笔记 > 编程语言 > 正文

Oracle:OALL8处于不一致状态

如何解决《Oracle:OALL8处于不一致状态》经验,为你挑选了1个好方法。

作为升级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系统请求补丁.



1> Peter Bought..:

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

cfqueryparam无论如何,你应该使用它们(通过)来保证安全性,如果它解决了更有理由这样做的问题.


如果你有兴趣在什么实际的错误意味着,谷歌有很多 的 结果,这表明它是一个与JDBC驱动程序错误,甚至提出一个补丁可用.


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


具有讽刺意味的是,这个页面是谷歌十大结果之一.
推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有