Пул соединений Oracle OLEDB и недействительные соединения - PullRequest
4 голосов
/ 08 июня 2010

Мы используем ADO для доступа к Oracle 10g, выпуск 2, поставщик Oledb для Oracle 10g. Мы столкнулись с некоторой проблемой с пулом соединений. База данных находится на удаленной машине, и пул соединений происходит как следует. Но если по какой-либо причине удаленная машина отключается, соединение возвращается из пула, и запрос по этому соединению не выполняется. Когда это соединение закрыто, оно возвращается обратно в пул, а не становится недействительным. Последующие запросы на открытие соединения являются успешными, но запрос не выполняется. Это странное поведение, согласно спецификациям OLEDB, провайдер должен поддерживать свойство DBPROP_CONNECTIONSTATUS, поэтому в случае неправильного соединения оно не будет возвращено обратно в пул.

Вещи устают, когда появляется удаленная машина. Соединения в пуле по-прежнему недействительны, и, хотя открытие соединения успешно, запрос на соединение не выполняется. Oracle OLEDB больше не может подключиться к серверу, и мы должны перезапустить наше приложение. Ну, это нежелательно, потому что наше приложение является критическим приложением.

Любые идеи о том, как преодолеть это.

Спасибо Mubashir

Ответы [ 3 ]

1 голос
/ 10 ноября 2010

Если вы делаете это программно, используйте блок try, чтобы в случае чего-то не получилось. С блоком try вы можете перехватить исключение и проигнорировать его, чтобы ошибки были скрыты.

Вы можете указать пулу не принимать недопустимые соединения, пометив соединение как недопустимое до его возвращения в пул.

0 голосов
/ 07 октября 2011

Соединения восстанавливаются через 10 минут по умолчанию. Время можно установить с помощью ключа реестра SPTimeout в корневом ключе поставщика oledb.

0 голосов
/ 10 ноября 2010

В большинстве реализаций пула соединений можно проверить соединение перед его использованием.Например: вы определяете запрос проверки, такой как select * from dual, и если вы выбираете соединение из пула, этот запрос будет выполнен.Если произойдет сбой, соединение будет исключено из пула, и будет открыто новое.

...