跪求:
java.sql.SQLException: OALL8 处于不一致状态,违反协议,如何解决
大家好:
小弟最近遇见了该问题,一直没能找到原因,程序是解析文件入库,然后查询数据,计算数据,在多个地方报出该异常,不论是查询、删除还是插入。。。,但不是连续报,大概每过4小时左右集中爆发多次,试过很多方法都不行,包括更换驱动,增大undo,重启应用,重装数据库。。。。,仔细检查SQL和数据库结构,也没看出什么问题,难道是并发线程过多导致??请各位大侠给给建议,谢谢!!(数据库是ORACLE 版本10.2.0.1.0,驱动ojdbc14 10.2.0.1.0)
Caused by: java.sql.
SQLException: OALL8 处于不一致状态
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)
at oracle.jdbc.driver.T4C8Oall.marshal(T4C8Oall.java:351)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:201)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:798)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:838)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1131)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3284)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3328)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
Caused by: java.sql.SQLException: 违反协议
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:763)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:798)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:838)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1131)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3284)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3328)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
------解决方案--------------------
Caused by: java.sql.SQLException: OALL8 处于不一致状态
以前碰到过这样的错误,把class12.jar换成ojdbc14后OK了,不明白原因。
楼主的ojdbc14也这样
------解决方案--------------------
以前做项目时也遇到非常相近的的错误,想尽了各种办法,都不行,最后咨询了一个做oracle DBA多年的工程师,后来仔细测试发现原来是 sql写的有问题。当时确认的原因是由于select子查询引起的,这样的子查询可能是导致了大量的回滚段数据。 比如 where 某个字段 >(某个子查询)类似这样的有可能会产生你说的那种情况。
如果各种办法都用尽了建议找一位非常熟悉oracle的DBA来帮你分析下sql是否有问题。尤其是 sql语句非常长的情况。
如需其他帮助和支持。欢迎加入我们的java开发联盟。
群号:
247286682
来者请注明 csdn.