2009-07-06 4 views
11

Я столкнулся с проблемой объединения пулов Oracle через OracleConnectionCacheImpl. Когда я подключаюсь к пулу подключений на моем сервере базы данных (Oracle 10g) через тонкий драйвер, все работает нормально, пока после неопределенного времени соединение db не будет удалено (возможно, из-за неработающих соединений?), И я получаю сообщение об ошибке:Как автоматически повторно подключить пул соединений Oracle после прерывания соединения?

Закрытое подключение.

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

Я использую Apache Tomcat 6.0.18, Java EE6 обновление 11.

(Там, кажется, функция пинг в тонком драйвере Oracle. Значит ли это помощь, и где я могу его найти?)

+2

1) Вы можете добавить всю трассировку стеки для закрытого подключения 2) Вы установили InactivityTimeout, TimeToLiveTimeout или AbandonedConnectionTimeout любых значения не по умолчанию? 3) Используете ли вы ValidateConnection? –

+0

4) Физические соединения между сервером приложений и сервером БД обрезаются на сетевом уровне, например. через брандмауэр? –

+0

Где установить эти параметры? Я новичок в программировании Oracle, поэтому я не уверен, где найти эти параметры. Где я могу найти ValidateConnection и принудительно повторно подключиться? (Просто обновляя мой браузер сразу после того, как я вижу, что ошибка сразу исправит. Я не уверен, что это проблема брандмауэра.) – futureelite7

ответ

-1

Используйте другую библиотеку пула соединений, такую ​​как C3P0, и используйте эту функцию для автоматического reconnect.

0

Apache DBCP (DB connection pool) поможет здесь. Вы можете настроить с помощью параметра «validationQuery», который является SQL-запросом для запуска в соединении, удаленном из пула, прежде чем он вам его предоставит. Если запрос завершился неудачно, соединение будет отброшено, а новое будет сделано и предоставлено вам.

См. Здесь http://commons.apache.org/proper/commons-dbcp/configuration.html для более подробной информации.

Обратите внимание, что валидацияQuery будет вызываться каждый раз, когда вы получаете соединение из пула, поэтому оно должно быть как можно быстрее. например:

SELECT id FROM users LIMIT 1; 
0

Вы можете добавить некоторые параметры конфигурации в context.xml, так что соединение бассейн будет кот заботиться о мертвых соединений. Вот один пример context.xml, пожалуйста, используйте пользователь/пароль/url/ports и т. Д. В соответствии с вашими настройками.

<?xml version="1.0" encoding="UTF-8"?> 
<Context path=""> 
    <!-- Specify a JDBC data source --> 
    <Resource name="jdbc/db" auth="Container" 
       type="javax.sql.DataSource" 
       username="user" 
       password="password" 
       driverClassName="driver.class.fullpath" 
       url="jdbc:oracle://localhost:3306/ 
       maxActive="50" 
       maxIdle="10" 
       testOnBorrow="true" 
       testWhileIdle="true" 
       validationQuery="/* ping */" 
       removeAbandoned="true" 
       logAbandoned="true"/> 
</Context> 
Смежные вопросы