Oracle Sql 错误:协议冲突/OALL8 处于不一致状态

Posted

技术标签:

【中文标题】Oracle Sql 错误:协议冲突/OALL8 处于不一致状态【英文标题】:Oracle SqlError: Protocol Violation / OALL8 is in an inconsistant state 【发布时间】:2012-03-17 05:54:48 【问题描述】:

我遇到了协议违规,OALL8 是一个不一致的状态异常,试图执行 SELECT 查询,但仅在我的一些表上。我首先在我编写的一个测试应用程序中注意到了这一点,该应用程序执行了SELECT * FROM SOMETABLE。它会通过数百条记录,然后锁定我。我尝试在 Oracle 的 SQLDeveloper 中运行相同的查询,并且会在某些表上获得协议违规异常。最终,对于任何查询,它都会指示“OALL8 处于不一致状态”。

有谁知道为什么会发生这种情况以及如何解决这个问题?我的不一致状态在哪里? Oracle 的 SqlDeveloper 是它自己的独立客户端,还是依赖 ODAC 或 Instant Client(在 PATH envi var 中引用)存在?

最近唯一改变的是我安装了 ODAC,以便我可以使用 odp.net 替换 .NET 中的 System.Data.OracleClient。它是 ODAC 11.2.0.3.0,带有 Oracle Developer Tools for Visual Studio,32 位。此后,我更新了我的 PATH environmetn 变量以指向我的独立即时客户端。

Instant Client - 11.2.0.2.0,在 Win XP SP3 上运行,32 位 Oracle DB:

Oracle Database 11g Express Edition Release 11.2.0.2.0 - 生产,在 Windows Server 2003,x64 上运行

ODAC:11.2.0.3.0

SqlDeveloper 是在我安装 ODAC 之前安装的,但不知何故 SqlDeveloper 似乎正在通过 ODAC 作为客户端,尽管 PATH 环境变量中没有引用 ODAC。

更新:当我最初安装 ODAC 时,我的所有查询都正常运行。然后他们在一天后停止运作,我无法解释为什么。我尝试卸载 ODAC,但在查找要删除的 .DLL 时失败。然后我手动删除了我的 ORACLE_HOME,并重新安装了 ODAC,它现在工作正常。我不明白为什么会这样。

【问题讨论】:

【参考方案1】:

SQL Developer 使用 ORACLE_HOME 和可用的驱动程序。您在此看到的问题是 ORACLE_HOME 与 SQL Developer 中捆绑的 JDBC 驱动程序版本不同。

对此的“修复”是确保 oracle 客户端是最新的 w/您安装的 sqldev 版本。找到这个的最简单方法是连接运行show jdbc

show jdbc
-- Database Info --
Database Product Name: Oracle
Database Product Version: Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
Database Major Version: 12
Database Minor Version: 1
-- Driver Info --
Driver Name: Oracle JDBC driver
Driver Version: 12.2.0.1.0
Driver Major Version: 12
Driver Minor Version: 2

【讨论】:

以上是关于Oracle Sql 错误:协议冲突/OALL8 处于不一致状态的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句异常导致项目报错

oracle TNS 协议适配器错误

SQLException:oracle 中的协议冲突

oracle TNS:适配器错误问题

我用PL/SQL-Developer登录oracle时出现 ORA-12560:TNS:协议适配器错误怎么办?急!!!!!

Oracle+Entity Framework主键冲突