Oracle ODP.NET управляемый драйвер и проблемы с пулами соединений

Я знаю, что это должен быть вопрос для Oracle, но в https://community.oracle.com/ уже есть четыре потока, спрашивающих то же самое, и они не получают ответа. Может быть, кто-то в stackru может помочь мне, так как мы получаем МАССОВЫЕ проблемы с управляемыми драйверами. Мы надеемся, что кто-то из этого сообщества может знать ответ.

После перехода с 11 неуправляемых на 12c управляемые драйверы (4.121.2.0 от Nuget) наша система получает исключения от Oracle. Это стек вызовов:

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): Request timed out  
   bei OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch)  
   bei OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch)  
   bei OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword)  
   bei Oracle.ManagedDataAccess.Client.OracleConnection.Open()  

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

То же самое программное обеспечение с предыдущими неуправляемыми драйверами вообще не имело проблем, поэтому оно не имеет никакого отношения к размеру пула или не удаляющимся соединениям (как я сказал, мы могли воспроизвести проблему практически без запросов к системе).

Кто-нибудь из вас слышал что-то подобное и мог бы помочь нам? Большое спасибо за любые подсказки.

0 ответов

Не могу добавить это в комментарии, так что здесь, на всякий случай, если кто-то попадет сюда, как я сделал неделю назад...

Наша проблема была при переключении с Oracle.DataAccess на Oracle.ManagedDataAccess.

Первый работал правильно, но с обновлением до управляемого драйвера все пошло к черту (ничего не меняя в коде)

Мы отладили все (или, по крайней мере, мы так думали), и ничего не вышло, пока коллега не придумал что-то о том, что читатели неправильно настроены при вызове с параметром commandbehaviour.

Как я уже сказал, мы думали, что у нас все это дважды и трижды проверено... но проблема такого рода в ридере была проблемой (кстати, он не был расположен в нашем модуле доступа к БД, что позволило нам не видеть его до сих пор...) организовать свой код!)

rd = cmd.ExecuteReader(CommandBehavior.CloseConnection)

при этом вызове с помощью управляемого драйвера, (кажется) читатель не закрывается

Просто звоню

rd.Close()   

после получения необходимых данных от читателя сделали свое дело.

Другие вопросы по тегам