/ / Як автоматично підключити пул з'єднань Oracle після переривання з'єднання? - jdbc, oracle10g, підключення до бази даних, об'єднання-об'єднання

Як автоматично відновити базу з'єднання Oracle після переривання з'єднання? - jdbc, oracle10g, підключення до бази даних, підключення до з'єднання

У мене є проблема з Oracleоб'єднання з'єднань через OracleConnectionCacheImpl. Коли я підключаюсь до пулу підключень на моєму сервері баз даних (Oracle 10g) через тонкий драйвер, все працює нормально, поки через не визначений час з'єднання db перестане (можливо, через непрацюючі з'єднання?), І я отримаю повідомлення про помилку:

Закрите з'єднання.

Оновлення сторінки та повторна спробаз'єднання знову підключає базу даних, тому, здається, це не проблема з мережею або базою даних. Чи спосіб пулу з'єднань Oracle підтвердити своє з'єднання та знову підключитися, якщо з'єднання в пулі з будь-якої причини мертве?

Я використовую Apache Tomcat 6.0.18, оновлення Java EE6 11.

(Здається, у тонкому драйвері Oracle є функція ping. Чи допомагає це і де я можу її знайти?)

Відповіді:

0 для відповіді № 1

Тут допоможе Apache DBCP (пул з'єднання DB). Ви можете налаштувати за допомогою параметра "validationQuery", який є SQL-запитом для запуску підключення, видаленого з пулу, ПЕРЕД того, як він вам його надасть. Якщо запит не вдається, з'єднання відміняється, а новий робиться та надається вам.

Дивіться тут http://commons.apache.org/proper/commons-dbcp/configuration.html для більш детальної інформації.

Зверніть увагу, що валідаціяQuery буде викликана щоразу, коли ви отримуєте з'єднання з пулу, тому воно повинно проходити якомога швидше. наприклад:

SELECT id FROM users LIMIT 1;

0 для відповіді № 2

Ви можете додати деякі параметри конфігурації вконтекст.xml, щоб пул з'єднань tomcat піклувався про мертві з'єднання. Ось один приклад контексту.xml, будь ласка, використовуйте користувач / пароль / URL / порти тощо відповідно до ваших налаштувань.

<?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>

-1 для відповіді № 3

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