down votefavorite
I recently updated our Oracle JDB driver to 12.2.0.1.0. After the update we just get some errors from the Orcale driver that we haven't experienced yet and I haven't found a discussion pointing how to solve this.
The application that we develop in our company has a dispatcher that manages the execution of different jobs. The jobs can open connections to the data base and perform some SQL queries on it (and then of course close the connections).
The jobs are executed in parallel (using a fork mechanism). Of course, there is a maximum of jobs that can be executed in parallel. If a job is not executed at the moment, it waits for beeing executed. The ordering of which jobs can be executed is managed using a Queue.
The error below occurs under the following circumstances: the dispatcher executes in parallel the maximum number of jobs allowed to run simultaneously and there are jobs waiting to be executed. In the moment in which a waiting job is going to be started (that means a running job is finished and a new can be started) the following error occurs:
Caused by: de.fact.first.process.data.ProcessDataException: java.sql.SQLRecoverableException: IO Error: Operation interrupted
at JobDataFactoryImplJDBC.getByJobId(JobDataFactoryImplJDBC.java:210)
... 19 more
Caused by: java.sql.SQLRecoverableException: IO Error: Operation interrupted
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:761)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:904)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1082)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3780)
at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1343)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3822)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:83)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:83)
at JobDataFactoryImplJDBC.getByJobId(JobDataFactoryImplJDBC.java:205)
... 19 more
Caused by: java.io.InterruptedIOException: Operation interrupted
at oracle.net.nt.TimeoutSocketChannel.handleInterrupt(TimeoutSocketChannel.java:311)
at oracle.net.nt.TimeoutSocketChannel.write(TimeoutSocketChannel.java:221)
at oracle.net.ns.NIOPacket.writeToSocketChannel(NIOPacket.java:211)
at oracle.net.ns.NIONSDataChannel.writeDataToSocketChannel(NIONSDataChannel.java:181)
at oracle.net.ns.NIONSDataChannel.writeDataToSocketChannel(NIONSDataChannel.java:132)
at oracle.jdbc.driver.T4CMAREngineNIO.prepareForReading(T4CMAREngineNIO.java:96)
at oracle.jdbc.driver.T4CMAREngineNIO.unmarshalUB1(T4CMAREngineNIO.java:534)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:485)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:612)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:226)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:59)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:747)
... 28 more
My first thought was that maybe the application exceeds the number of connections and therefore Oracle interrupts the connections. This was not the problem, as I increased the number of processes (and sessions) and additionally distributed_lock_timeout. Even after adjusting these options, the problem still occurs. There are no connection kept open by the waiting jobs. I am really puzzled and have no idea what is the problem. For sure I can say that the error occurs only in the new Oracle driver, the issue is not reproducible in the old one (12.1.0.1.0).
Greeting and thanks for the help in advance,
Ivaylo