2015-07-28 16 views
6

jdbc kullanarak oracle 11.2 ile konuşabilen bir java uygulamasına sahibiz. BizResultSet.next() oracle ile konuşurken asılı 11.2 jdbc kullanarak

Created-By: 20.12-b01 (Sun Microsystems Inc.) 
Implementation-Vendor: Oracle Corporation 
Implementation-Title: JDBC 
Implementation-Version: 12.1.0.1.0 

Biz de Statement.setQueryTimeout() Bir ResultSet.next yaparken

Ancak birkaç günde, kahin konuşurken iplik asılı() kullanıyorsanız oracle-jdbc-7.jar kullanıyorsunuz .

Kod şöyle görünür:

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) 

Bu sorunun çözümüne yönelik herhangi bir fikir mutluluk duyacağız?

openjdk7 ve oracle's JDK 7'yi kullanmayı denedik ama yardımcı olmadı.

Teşekkürler.

+0

Tek başına stacktrace'e dayalı önerilerde bulunmak çok zor. 'ResultSet' (ve sorguyu) oluşturan Java kodunu yüklemek sorunu çözmenize yardımcı olabilir. –

+1

[Oracle - askıya alma işlemi sorunlarını giderme] (http://stackoverflow.com/questions/11673947/troubleshoot-oracle-hung-process) ilgili olabilir - aynı hata kilitlendi <...> (oracle.jdbc.driver.T4CConnection) 'yığın izinde görünür. –

+0

@MickMnemonic Bence yorumunuz cevabımdan daha iyi. – plkmthr

cevap

1

Engelleme oturumunu bulmaya çalışın.

SELECT 
    s.blocking_session, 
    s.sid, 
    s.serial#, 
    s.seconds_in_wait 
FROM 
    v$session s 
WHERE 
    blocking_session IS NOT NULL 

Oturumunuz buysa, sorgunuz optimizasyon gerektirebilir. Aksi takdirde, başka bir şey soruna neden oluyor.

P.S. : Ben SQL uzmanı değilim

İlgili konular