Подключение Oracle к .Net — пул подключений

В частности, это касается служб отчетов SQL Server, однако я также рассматриваю это как типичную проблему приложений .Net.

Вот в чем проблема. Мы используем SSRS для передачи данных из базы данных Oracle. С первого дня наши пользователи жалуются на такие ошибки, как ORA-2396: Превышено максимальное время простоя, ORA-01012-Вы не вошли в систему и т. д.

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

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

Вот ссылки, в которых есть вышеупомянутое упоминание http://msdn.microsoft.com/en-us/library/8xx3tyca(v=VS.90).aspx

http://www.codeproject.com/KB/dotnet/ADONET_ConnectionPooling.aspx

Есть еще парочка. Однако я нигде не получаю очень подтвержденного заявления о том, что да, это проблема с текущими (последними версиями .Net и oracle и т. д.).

Что касается решения, они упоминают, что мы будем использовать атрибут «Проверить соединение = true» как часть строки подключения. Но если я попытаюсь использовать это, он говорит: «Ключевое слово не поддерживается — проверьте соединение». (Я также пробовал Валидкон)

У меня есть следующие вопросы: 1. Подтверждено ли, что эта проблема с «грязным» чтением из пула соединений существует? 2. Если да, то каковы решения? 3. Если нет, то что может быть причиной проблем с нашей стороны.

Если вам нужна дополнительная информация, не стесняйтесь комментировать.


person Subhash Dike    schedule 18.07.2011    source источник
comment
Допустимые строки подключения к SQL Server находятся здесь: msdn. microsoft.com/en-us/library/. Возможно, вы захотите попробовать отключить пул соединений: для этого установите максимальный размер пула = 1.   -  person Jeremy McGee    schedule 19.07.2011
comment
Параметры, касающиеся ограничения размера пула или отключения пула, не разрешены в соответствии с политиками организации.   -  person Subhash Dike    schedule 19.07.2011


Ответы (2)


Основная проблема здесь принадлежит вашим администраторам баз данных. Я вижу ту же ошибку, когда использую учетную запись (т. е. мою личную учетную запись оракула), которая подвержена той же очистке бездействующих соединений, что и наши администраторы баз данных. Лучшим решением было бы назначить вам «служебную» учетную запись, которая не закрывается после простоя.

Тем не менее, я предполагаю, что вы получаете «Ключевое слово не поддерживается - проверьте соединение», потому что вы используете поставщика Microsoft, а не поставщика оракула. Я не так хорошо знаком с соединениями SSRS, поэтому я не уверен, как вы выбираете одно из другого. Однако в .net это разница между System.Data.OracleClient и Oracle.DataAccess.

Если вы решите эту проблему, опция проверки соединения добавляет накладные расходы, предварительно проверяя соединение перед его использованием, что делает его немного лучше, чем простое отключение пула. Еще одна вещь, которую вы можете попробовать, это установить минимальный размер пула = 0, что позволяет пулу исчезнуть, оставляя меньшую вероятность того, что соединение будет бездействовать слишком долго. К сожалению, это не идеальное решение, поскольку провайдер проверяет устаревшие соединения только ПОСЛЕ того, как они используются.

Вот ссылка на параметры строки подключения для поставщика данных oracle, если у вас его еще нет: http://download.oracle.com/docs/html/E10927_01/featConnecting.htm#i1006393

person b_levitt    schedule 19.07.2011
comment
Спасибо за ответ. Да, я понял, почему атрибут строки подключения не распознается. Я также вижу смысл в том, что администратор базы данных меняет настройку. Тем не менее, основной вопрос, который у меня возник, заключался в том, подтверждает ли это, что поведение пула соединений только такое? то есть в какой-то момент в пуле могут быть соединения, которые на самом деле вообще непригодны для использования, и нет ли способа очистить их до того, как они действительно будут использованы? - person Subhash Dike; 19.07.2011
comment
Есть программные вещи, которые вы могли бы делать, но в контексте SSRS я бы сказал, что вы мало что можете сделать, кроме отключения пула (что, на мой взгляд, является совершенно законным вариантом, учитывая, что создание соединения, вероятно, незначительно в контексте отчетности, где долго время запроса и большие наборы данных являются нормой). Поскольку срок действия соединения проверяется ПОСЛЕ возврата соединения, я не думаю, что существует гарантированное решение, а только изменения, которые уменьшат проблему. - person b_levitt; 21.07.2011
comment
Вот ссылка на то, что, как я думаю, будет вашими параметрами строки подключения, если вы хотите продолжить использование поставщика MS msdn.microsoft.com/en-us/library/ - person b_levitt; 21.07.2011

Это известная проблема, и она возникает везде, где вы используете пул соединений, и зависит от нескольких вещей — одна из них — это настройки на сервере… иногда даже сложно при использовании Oracle RAC… Некоторые провайдеры Oracle .NET встроили в решениях для объединения, которые легко решают эту проблему... один из таких поставщиков - тот, который продается Devart... http://www.devart.com/dotconnect/oracle/

Я не связан с Devart, просто счастливый клиент...

person Yahia    schedule 19.07.2011