Закрытое соединение в UCP и Oracle 12 c

При переходе с Oracle 11g на Oracle 12 c мы получаем ошибку ниже, используя UCP(12.1.0.2.0)

    java.sql.SQLException: The connection is closed: The connection is closed
            at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:464)
            at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:448)
            at oracle.ucp.jdbc.proxy.JDBCConnectionProxyFactory.invoke(JDBCConnectionProxyFactory.java:307)
            at oracle.ucp.jdbc.proxy.ConnectionProxyFactory.invoke(ConnectionProxyFactory.java:50)
            at com.sun.proxy.$Proxy24.prepareStatement(Unknown Source)

Это многопоточное приложение, в котором мы берем соединение из пула UCP, используем его и затем закрываем соединение. Однако для некоторых операций мы получаем указанную выше ошибку в строке: connection.prepareStatement (оператор). Мы используем PoolDataSource.

Несколько попыток 1) Использование значений по умолчанию для пула соединений и установка только минимального, максимального размера пула. 2) Установка setValidateConnectionOnBorrow как true, 3) Установка setValidateConnectionOnBorrow как true и setValidateConnectionOnBorrow как "SELECT 1 FROM DUAL" 4) Использование помеченного соединения 5) БД не отключает соединение через определенное время, а также нет межсетевого экрана, который блокирует соединение, 6) Использование setMaxConnectionReuseTime

Я ссылался на несколько ссылок, которые показывают похожие проблемы. Однако это не показывает никакого разрешения https://community.oracle.com/thread/2183613

https://community.oracle.com/thread/2298699

Соединение закрывается при использовании Oracle UCP

Кто-нибудь сталкивался с подобной проблемой на Oracle 12C с UCP?? Есть ли какая-то ошибка в последней версии UCP?

2 ответа

У меня нет проблем при использовании пула соединений Weblogic.

Я думаю, что проблема именно в том, что описано здесь для вопроса oracle- db-java-sql-sqlexception-closed-connection.

Будьте уверены, что соединение НЕ закрыто перед звонком prepareStatement() (обратите внимание на многопоточность).

Может быть, добавить некоторые записи, чтобы увидеть, если close() действительно не закрыт до prepareStatement() и попробуйте записать значение для connection.isValid() прямо перед prepareStatement() вызов.

Можете ли вы предоставить пример кода?

Я столкнулся с проблемой, похожей на эту. Я использовал ucp-11.2.0.3.jar. Я зарегистрировал свой процесс подробно и заметил, что соединение из пула было

  1. Ненулевой
  2. не закрыто
  3. Также недействительно (con.isValid() возвращает false)

    Я прошел через очень много форумов, но не очень помог. Я наконец нашел эту ссылку, связанную с похожей проблемой. Следовательно я обновил до ucp-11.2.0.4 и все работало хорошо.

Не уверен, что это решение, но оно решило проблемы в моем случае.

Другие вопросы по тегам