Ответ 1
Если вы можете использовать odac (odp) 11g, у вас есть настройка Validate Connection для вашего пула. Он может подтвердить подключение до его использования.
Атрибут Проверить подключение проверяет соединения, выходящие из пула. Этот атрибут должен использоваться только в случае, когда это абсолютно необходимо, поскольку оно вызывает обратную связь с базой данных для проверки каждого соединения непосредственно перед его подачей в приложение. Если недействительные подключения являются необычными, разработчики могут создавать свой собственный обработчик событий для извлечения и проверки нового соединения, вместо использования атрибута Validate Connection. Это обычно обеспечивает лучшую производительность.
Если это будет недостаточно, вы можете попробовать этот документ из oracle.
Управление пулом соединений
Управление пулом соединений ODP.NET обеспечивает явный пул соединений управление приложениями ODP.NET. Приложения могут явно очищать соединений в пуле соединений.
Используя управление пулом соединений, приложения могут выполнять следующие действия:
Примечание. Эти API не поддерживаются в хранимой процедуре .NET. Очистить соединения из пулов соединений с помощью метода ClearPool.
Очистить соединения во всех пулах соединений в приложении домена, используя метод ClearAllPools.
Когда соединения удаляются из пула, ODP.NET повторно заполняет пул с новыми соединениями, которые имеют как минимум количество подключений по размеру Min Pool в строке подключения. Новые подключения не обязательно означает, что пул будет иметь действительные соединения. Например, если сервер базы данных не работает, когда вызывается ClearPool или ClearAllPools, ODP.NET создает новые подключения, но эти соединения все еще недействительны, поскольку они не могут подключиться к базе данных, даже если база данных появляется позднее.
Рекомендуется, чтобы ClearPool и ClearAllPools не вызывались до приложение может создавать правильные подключения к базе данных. Разработчики .NET могут разработать код, который постоянно проверяет, может быть создано недействительное соединение с базой данных и вызывает ClearPool или ClearAllPools, если это правда.
Кроме того, может быть этот пост поможет вам.
Обновление: Как указано @MPelletier, для oracle 12 ссылка отличается.