我正在获得协议违规,而OALL8是一个尝试执行SELECT查询的异常状态异常,但仅限于我的某些表.我在我编写的测试应用程序中首先注意到这一点,它执行了SELECT * FROM SOMetaBLE.它会通过几百条记录,然后锁定我.我尝试在Oracle的sqlDeveloper中运行相同的查询,并在某些表上获得Protocol Violation异常.最终,对于任何查询,它都指向“OALL8处于不一致状态”的点.
有谁知道为什么会发生这种情况以及如何解决问题?我的不一致状态在哪里? Oracle的sqlDeveloper是独立的客户端,还是依赖于ODAC或Instant Client(在PATH envi var中引用)?
最近唯一改变的是我安装了ODAC,以便我可以使用odp.net来替换.NET中的System.Data.OracleClient. IT是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快捷版11.2.0.2.0版 – 生产,在Windows Server 2003,x64上运行
> ODAC:11.2.0.3.0
在安装ODAC之前安装了sqlDeveloper,但不管怎样,sqlDeveloper似乎都是通过ODAC作为客户端,尽管在PATH环境变量中没有引用ODAC.
更新:当我最初安装ODAC时,我的所有查询都正常运行.然后他们在一天后停止运作,我无法解释原因.我试图卸载ODAC,它在查找要删除的.DLL时失败.然后我手动删除了我的ORACLE_HOME,并重新安装了ODAC,它现在正常工作.我不明白为什么会这样.
解决方法
sql Developer在可用时使用ORACLE_HOME及其驱动程序.您在此看到的问题是ORACLE_HOME与sql Developer中捆绑的JDBC驱动程序的版本不同.
这个’修复’是为了确保oracle客户端是最新的,你已经安装了sqldev的版本.找到这个的最简单方法是在连接运行时显示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