Закрытое соединение в 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. Я зарегистрировал свой процесс подробно и заметил, что соединение из пула было
- Ненулевой
- не закрыто
Также недействительно (con.isValid() возвращает false)
Я прошел через очень много форумов, но не очень помог. Я наконец нашел эту ссылку, связанную с похожей проблемой. Следовательно я обновил до ucp-11.2.0.4 и все работало хорошо.
Не уверен, что это решение, но оно решило проблемы в моем случае.