【发布时间】:2011-06-08 18:33:35
【问题描述】:
我得到以下异常:
java.sql.SQLException: Protocol violation
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:190)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:286)
at oracle.jdbc.driver.T4C80all.receive(T4C80all.java:766)
at oracle.jdbc.driver.T4CPreparedStatement.do0all8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.fetch(T4CPreparedStatement.java:1225)
at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:373)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:284)
Oracle 系统在 Solaris 5.10 上运行 10.2.0.3.0。 jdbc 驱动程序在 JDK 1.6.0_21 上运行(如果它是导入的,java 也在 Solaris 5.10 机器上运行)。我尝试了几种不同的 oracle 瘦驱动程序,包括最新的和似乎与 oracle 版本完全匹配的驱动程序。
我正在运行的查询相当简单:“select * from some_table order by key1, key2, key3” 然后遍历结果集并写入文件。该表有大约 1200 万行,所以我预计该过程运行时间很长,但它似乎在 5-15 分钟内死亡。每次我运行它时,它都会在不同的行上爆炸,所以我认为问题不在于数据。
我找到了 oracle 警报日志,但我无法判断其中的任何内容与我的进程有关。不过,我不是预言机专家,也许我需要查看预言机设置。奇怪的是,我在不同的连接上运行了大约五个此类查询(其中几个稍微复杂一点),只有两个最简单的查询会遇到这个问题。
任何关于如何缩小问题范围的帮助或想法将不胜感激。
【问题讨论】:
-
也许您的数据库服务器内存不足?您是否正确关闭了 Java 中的资源?这是发生在您的系列中的第一个查询运行还是后面的一个查询中?
标签: java oracle exception jdbc