Oracle jdbc thin Connection reset の対処
久しぶりに JDBCRunner をやったらこれにハマってたのでメモ。
症状的には、1回目は通るのに2回目を掛けようとすると流れなくて、数分後にエラー。こうなると何回やっても同じで30分くらい放置するとなぜかまた1回だけ通るようになる…みたいな不思議な動き。
「jdbc thin Connection reset」でGoogle先生に聞いたら一発HITでした。適当に作ったLinuxVMホストでかけたので、最初はNW周りを疑いまくったのだけど違った。
http://d.hatena.ne.jp/tmftake/20130130/1359553276
●回避版の今の起動方法メモ
export CLASSPATH="jdbcrunner-1.2.jar:ojdbc6.jar:orai18n.jar" java -Djava.security.egd=file:/dev/./urandom JR test.txt
●エラーになってたときのログ
19:37:31 [ERROR] An exception occurred at agent 0 jdbcrunner.ApplicationException: An exception occurred while connecting to database at jdbcrunner.Agent.callInit(Agent.java:227) at jdbcrunner.Agent.run(Agent.java:86) at java.lang.Thread.run(Thread.java:679) Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (IO Error: Connection reset) at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) at jdbcrunner.Manager.getConnection(Manager.java:224) at jdbcrunner.Agent.callInit(Agent.java:222) ... 2 more Caused by: java.sql.SQLRecoverableException: IO Error: Connection reset at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:467) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521) at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) ... 6 more Caused by: java.net.SocketException: Connection reset at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113) at java.net.SocketOutputStream.write(SocketOutputStream.java:153) at oracle.net.ns.DataPacket.send(DataPacket.java:210) at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:230) at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:312) at oracle.net.ns.NetInputStream.read(NetInputStream.java:260) at oracle.net.ns.NetInputStream.read(NetInputStream.java:185) at oracle.net.ns.NetInputStream.read(NetInputStream.java:102) at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124) at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80) at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192) at oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:404) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:385) ... 14 more