Соединение Oracle с .Net - Пул соединений - PullRequest
3 голосов
/ 19 июля 2011

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

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 19 июля 2011

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

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

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

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

0 голосов
/ 19 июля 2011

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

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

...