'java.sql.SQLRecoverableException: ошибка ввода-вывода: операция прервана' после обновления драйвера Oracle до 12.2.0.1.0 - PullRequest
0 голосов
/ 27 августа 2018

Я недавно обновил наш драйвер Oracle JDB до 12.2.0.1.0.

После обновления мы просто получаем некоторые ошибки от драйвера Oracle, с которыми мы еще не сталкивались, и я не нашел обсуждения, указывающего, как решить эту проблему.

Приложение, которое мы разрабатываем в нашей компании, имеет диспетчера, который управляет выполнением различных заданий.

Задания могут открывать соединения с базой данных и выполнять некоторые SQL-запросы к ней (а затем, конечно, закрывать соединения).

Задания выполняются параллельно (с использованием механизма вилки).

Конечно, существует максимум заданий, которые могут выполняться параллельно.

Если в данный момент задание не выполняется, оно ожидает выполнения.

Порядок выполнения заданий можно управлять с помощью очереди.

Приведенная ниже ошибка возникает при следующих обстоятельствах: диспетчер выполняет параллельно максимальное количество заданий, разрешенных для одновременного выполнения, и есть задания, ожидающие выполнения.

В тот момент, когда будет запущено ожидающее задание (это означает, что запущенное задание завершено и может быть запущено новое), возникает следующая ошибка:

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 de.fact.first.process.data.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

Моей первой мыслью было, что, возможно, приложение превышает количество соединений, и поэтому Oracle прерывает соединения.

Это не было проблемой, так как я увеличил количество процессов (и сессий) и дополнительно распределен_lock_timeout.

Даже после настройки этих параметров проблема все еще возникает.

Нет ожидающих соединений открытых соединений.

Конечно, я могу сказать, что ошибка возникает только в новом драйвере Oracle, проблема не воспроизводится в старом (12.1.0.1.0).

...