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