Java ResultSet.next()在使用jdbc与oracle 11.2对话时挂起

Java ResultSet.next()在使用jdbc与oracle 11.2对话时挂起,java,oracle,jdbc,Java,Oracle,Jdbc,我们有一个java应用程序,它使用jdbc与oracle 11.2通信。我们正在使用oracle-jdbc-7.jar Created-By: 20.12-b01 (Sun Microsystems Inc.) Implementation-Vendor: Oracle Corporation Implementation-Title: JDBC Implementation-Version: 12.1.0.1.0 我们还使用Statement.setQueryTimeout() 但是,每隔几

我们有一个java应用程序,它使用jdbc与oracle 11.2通信。我们正在使用oracle-jdbc-7.jar

Created-By: 20.12-b01 (Sun Microsystems Inc.)
Implementation-Vendor: Oracle Corporation
Implementation-Title: JDBC
Implementation-Version: 12.1.0.1.0
我们还使用Statement.setQueryTimeout()

但是,每隔几天,与oracle对话的线程就会在执行ResultSet.next()时挂起

代码如下所示:

PreparedStatement ps = createPreparedStatement();
ps.setQueryTimeout(60);

while (true) {
    ps.executeQuery();

    //iterate over the ResultSet doing ResultSet.next() continuously

    //do something with the ResultSet

    //sleep for 1 second.
}
线程转储:

java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at oracle.net.ns.Packet.receive(Packet.java:311)
at oracle.net.ns.DataPacket.receive(DataPacket.java:105)
at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:305)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:249)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:171)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:89)
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:426)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:390)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
at oracle.jdbc.driver.T4CPreparedStatement.fetch(T4CPreparedStatement.java:1022)
at oracle.jdbc.driver.OracleStatement.fetchMoreRows(OracleStatement.java:3590)
at oracle.jdbc.driver.InsensitiveScrollableResultSet.fetchMoreRows(InsensitiveScrollableResultSet.java:1008)
at oracle.jdbc.driver.InsensitiveScrollableResultSet.absoluteInternal(InsensitiveScrollableResultSet.java:972)
at oracle.jdbc.driver.InsensitiveScrollableResultSet.next(InsensitiveScrollableResultSet.java:572)
- locked <0x00000000d0873738> (a oracle.jdbc.driver.T4CConnection)
java.lang.Thread.State:可运行
位于java.net.SocketInputStream.socketRead0(本机方法)
位于java.net.SocketInputStream.read(SocketInputStream.java:152)
位于java.net.SocketInputStream.read(SocketInputStream.java:122)
位于oracle.net.ns.Packet.receive(Packet.java:311)
位于oracle.net.ns.DataPacket.receive(DataPacket.java:105)
位于oracle.net.ns.NetInputStream.getNextPackage(NetInputStream.java:305)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:249)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:171)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:89)
位于oracle.jdbc.driver.T4CSocketInputStreamWrapper.readnextPackage(T4CSocketInputStreamWrapper.java:123)
位于oracle.jdbc.driver.t4CSocketingInputStreamWrapper.read(t4CSocketingInputStreamWrapper.java:79)
位于oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:426)
位于oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:390)
位于oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
位于oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
位于oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
位于oracle.jdbc.driver.T4CPreparedStatement.fetch(T4CPreparedStatement.java:1022)
在oracle.jdbc.driver.OracleStatement.fetchMoreRows(OracleStatement.java:3590)中
位于oracle.jdbc.driver.InsensitiveScrollableResultSet.fetchMoreRows(InsensitiveScrollableResultSet.java:1008)
位于oracle.jdbc.driver.InsensitiveScrollableResultSet.absoluteInternal(InsensitiveScrollableResultSet.java:972)
在oracle.jdbc.driver.InsensitiveScrollableResultSet.next(InsensitiveScrollableResultSet.java:572)
-锁定(一个oracle.jdbc.driver.T4CConnection)
如果您有任何关于解决此问题的想法,我们将不胜感激

我们已经尝试使用openjdk7和oracle的JDK7,但没有任何帮助


谢谢。

尝试查找阻止会话

SELECT
   s.blocking_session, 
   s.sid, 
   s.serial#, 
   s.seconds_in_wait
FROM
   v$session s
WHERE
   blocking_session IS NOT NULL
如果是您的会话,那么您的查询可能需要优化。否则,是其他原因导致了问题


注:我不是SQL专家

单凭stacktrace很难给出建议。发布创建
ResultSet
(和查询)的Java代码可能有助于解决问题。可能相关——相同的错误
锁定(oracle.jdbc.driver.T4CConnection)
出现在堆栈跟踪中。@Mick助记符我认为你的评论比我的答案好。