Как очистить пул соединений ODP.NET при ошибках соединения?

Я использую NHibernate и ODP.NET для подключения к базе данных Oracle 11g. Конечно, могут быть ошибки подключения (сбой сети, сбой БД, ...). Я обрабатываю все эти исключения в своем коде, поэтому проблем нет. Но, конечно, пользователь может повторить свои действия (возможно, это был просто короткий сетевой сбой), и вот моя проблема:

ODP.NET по умолчанию использует пул соединений. Обычно с этим проблем нет, но когда пользователь повторяет действие после ошибки подключения, NHibernate получает недопустимое (объединенное) соединение от ODP.NET. Пользователь должен повторить попытку несколько раз (пока пул не опустеет), чтобы он снова заработал.

Конечно, я могу отключить пул соединений в ODP.NET, но я бы хотел этого избежать. Я также читал о настройке, которая проверяет соединение с БД для каждого возвращенного соединения из пула, но это добавляет дополнительный круговой обход для каждого соединения, которое я ' Я бы тоже хотел этого избежать.

Есть ли способ настроить ODP.NET для автоматической очистки пула соединений, когда какое-либо соединение вызывает исключение соединения?

14
задан cremor 20 April 2011 в 06:46
поделиться