5

我得到协议违反,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,它现在工作正常。我不明白为什么会这样。

4

1 回答 1

0

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
于 2018-02-04T14:15:08.693 回答