Abbiamo un'applicazione java che comunica con Oracle 11.2 utilizzando jdbc. Stiamo utilizzando Oracle JDBC-7.jarResultSet.next() bloccato durante la conversazione con Oracle 11.2 utilizzando jdbc
Created-By: 20.12-b01 (Sun Microsystems Inc.)
Implementation-Vendor: Oracle Corporation
Implementation-Title: JDBC
Implementation-Version: 12.1.0.1.0
Inoltre stiamo usando Statement.setQueryTimeout()
Tuttavia, ogni pochi giorni, il filo a parlare con Oracle si blocca mentre si fa un ResultSet.next() .
codice simile a questo:
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.
}
Threaddump:
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)
Tutte le idee su come risolvere questo sarebbe apprezzato?
Abbiamo provato a utilizzare openjdk7 e oracle JDK 7 ma non è stato di aiuto.
Grazie.
È molto difficile dare suggerimenti basati su uno stacktrace da solo. Pubblicare il codice Java che crea il 'ResultSet' (e la query) potrebbe aiutare a risolvere il problema. –
[Risolvere i problemi relativi a Oracle-hung] (http://stackoverflow.com/questions/11673947/troubleshoot-oracle-hung-process) potrebbe essere correlato - lo stesso errore 'bloccato <...> (un oracle.jdbc.driver.T4CConnection) 'appare nella traccia dello stack. –
@MickMnemonic Penso che il tuo commento sia migliore della mia risposta. – plkmthr