Oracle 12C RAC в Solaris 11 - время ожидания случайного подключения
У нас возникла проблема, из-за которой из-за тайм-аута случайного соединения наше приложение Java подключается к Oracle 12c R1 RAC. Оба на Солярисе 11.
Вызвано: java.sql.SQLRecoverableException: IO Error: Сетевой адаптер не смог установить соединение
в oracle.jdbc.driver.T4CConnection.logon (T4CConnection.java:743)
...
...
Вызвано: java.net.SocketTimeoutException: истекло время соединения на java.net.PlainSocketImpl.socketConnection(NativeMethod)
И это происходит только случайно, может быть, один раз в три запуска?
Любая помощь приветствуется!!!! Спасибо!
0 ответов
Какую версию драйвера JDBC вы используете? Если вы используете тот, который поставляется с 12.2.0.1, замените его на более новый. Здесь у нас была такая же проблема; подключения случайно не работают. Но это совсем не тайм-аут. Сообщение "java.io.InterruptedIOException: истекло время ожидания чтения сокета" просто неверно.
Реальная проблема заключается в том, что системный вызов connect прерывается, как вы можете видеть из зондов dtrace.
23708/2: connect(0x8, 0xFFFFFFFF7F2EDD54, 0x20) = -1 Err#4
23708/2: lwp_sigmask(0x3, 0x4, 0x40) = 0xFFFFFFFF 0
23708/2: setcontext(0x1, 0xFFFFFFFF7F2ED2D0, 0x0) = 0 0
23708/2: connect(0x8, 0xFFFFFFFF7F2EDD54, 0x20) = -1 Err#149
Попробуйте ojdbc.jar из Oracle Client 18.3 или 19.3
Также существует патч для неопубликованной ошибки 12.2.0.1 25977056: AC: ЕДИНИЦЫ ДЛЯ TRANSPORT_CONNECT_TIMEOUT ИЗМЕНЕНЫ БЕЗ КВАЛИФИКАЦИИ.