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