Как подключить oracle manageddataaccess

Обновлено: 05.07.2024

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

Однако Oracle.DataAccess зависит от архитектуры системы, в которой он работает. Я увидел, что есть еще одна библиотека Oracle.ManagedDataAccess, независимая от архитектуры. Когда я использую эту библиотеку, она больше не может подключаться к серверу. Выбрасывается ORA-12545: Network Transport: Unable to resolve connect hostname .

Почему это так? Что различается между этими двумя библиотеками, потому что на основе того, что я читал до сих пор, это не должно быть проблемой.

  • % ORACLE_HOME% и% TNS_ADMIN% НЕ определены (помните, что работа tnsping и Oracle.DataAccess)
  • PATH имеет C:\oracle\11g\BIN .
  • Моя машина имеет только один tnsnames.ora файл

Если я переведу tnsnames.ora в то же место, что и мой .exe файл, он работает. Почему Oracle.DataAccess может найти tnsnames.ora в каталоге C:\oracle\11g\network\admin , но Oracle.ManagedAccess не может?

ОТВЕТЫ

Ответ 1

Ответ 2

Попробуйте добавить путь к tnsnames.ora в файл конфигурации:

Ответ 3

Чтобы избежать беспорядка в Oracle, не зная, где он ищет TNSNAMES.ORA(у меня есть добавленная путаница нескольких версий Oracle и 32/64 бит), вы можете скопировать настройки из существующего TNSNAMES.ORA в ваш собственный файл конфигурации и используйте его для вашего подключения.
Скажите, что вы довольны ссылкой "DSDSDS" в TNSNAMES.ORA, которая сопоставляется с чем-то вроде:


Вы можете взять текст после первого "=" и использовать его везде, где вы используете "DSDSDS", и ему не нужно будет находить TNSNAMES.ORA, чтобы знать, как подключиться.
Теперь ваша строка подключения будет выглядеть так:
string connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=DSDSDSHost)(Port=4521)))(CONNECT_DATA=(SERVICE_NAME=DSDSDSService)));User >

Ответ 4

Как только я нашел формат, который он искал в строке подключения, он отлично справился с Oracle.ManagedDataAccess. Без необходимости возиться с чем-то отдельно.

Ответ 5

Обратите внимание, что это обходное решение работает только в том случае, если вы установили 12c на том же компьютере, что и на вашем ноутбуке.

Если ваша база данных находится на сервере, отличном от вашего ноутбука, выберите вариант клиента, а не сервер, а затем включите TNS_ADMIN в свой app.config и не забудьте указать версию.

так как моя установка находится на моем ноутбуке, поэтому мой App.config выглядит следующим образом:

Ответ 6

В моем случае все сказанное выше было в порядке, но я все еще ORA-12545: Network Transport: Unable to resolve connect hostname

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

Эти ссылки мне очень помогли:

Ответ 7

Вот что вам нужно

На данный момент у вас есть 2 варианта подключения.

а) В строке подключения установите datasource в следующем формате

DataSource=ServerName:Port/SID. или DataSource=IP:Port/SID. DataSource=IP:Port/SID.

б) Создайте файл tnsnames.ora (только он будет отличаться от предыдущего опыта). Есть запись в нем:

AAA = (ОПИСАНИЕ =
(ADDRESS = (PROTOCOL = TCP) (HOST = ServerNameOrIP) (PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SIDNAME)))

Entity Framework 6 База данных первое соединение с Oracle11g

Entity Framework 6 База данных первое соединение с Oracle11g (детализация графики)

Сопутствующие документы:

Тело:

Что ж, начнем с практического примера.



После завершения создания мы открываем менеджер пакетов Nuget и устанавливаем некоторые пакеты.

Искать в диспетчере пакетов NugetManagedDataAccess


Установите второй здесь, oracle.ManagedDataAccess, а затем установите oracle.ManagedDataAccess.EntityFramework.

Причина в том, что oracle.ManagedDataAccess автоматически устанавливается после установки oracle.ManagedDataAccess.EntityFramework, но версия oracle.ManagedDataAccess ниже, как если бы они не синхронизировались, что позже приведет к неизвестным ошибкам (только подозреваемые, непроверенные).

Затем обновите Entity Framework до последней версии.

Хорошо, на данный момент справочная работа завершена. Далее настройте DataBase-First.





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

Я предоставляю официальную страницу загрузки здесь. Для этого требуется учетная запись Oracle. Кроме того, после успешной проверки загрузки загрузите установочный пакет в CSDN. Вы можете скачать и установить его напрямую.

Загруженный установочный пакет размером 58,69 МБ, установка по умолчанию в порядке.


Снимок экрана официального описания Oracle, приведенного выше, предельно ясен: это инструмент драйвера Oracle, интегрированный в Visual Studio 2015. Кроме того, чиновник также предоставляет инструменты интеграции для VS2013.

После завершения установки перезапустите VS и повторите описанные выше шаги. Вы обнаружите, что источник базы данных Oracle доступен. Хорошо, проблема решена, давайте продолжим.

Выберите элемент базы данных Oracle, появится следующий интерфейс:


Здесь необходимо пояснить, что используемый в настоящее время файл Tnsnames.ora, если настроенный нами файл прослушивания находится не в указанном выше расположении, нажмите «Поиск», чтобы перейти к автоматическому поиску. После выбора местоположения и псевдонима нажмите «Копировать», и вы можете связать свои Tns. Конфигурация копируется в Tns драйвера, или также можно напрямую заменить Tns драйвера по умолчанию нашим собственным файлом Tns.

Когда вы закончите, не забудьте сохранить.



Затем выберите таблицу или представление, которое вы хотите импортировать. Наконец нажмите Готово.


Таким образом, режим EF6 Database-First для подключения к экземпляру Oracle11g завершен.

Добавьте контроллер и напишите запрос для его проверки.


Посмотрите первые 100 записей этой таблицы.


ОК, данные вышли, успех!

PS: если вы используете драйвер oracle.ManagedDataAccess, вам не нужно устанавливать клиент Oracle локально.

Сводка распространенных ошибок (обновляется в любое время):

1. При обновлении модели из базы данных подскажите Модель сгенерирована с предупреждениями или ошибками 。

Это связано с тем, что таблица данных не стандартизирована, даже самый основной первичный ключ недоступен.

В следующей главе говорится, что EF6 Code-first подключается к Oracle11g

У нас есть приложение, работающее локально, где мы видим следующую ошибку:

ORA-12514: TNS: слушатель в настоящее время не знает об услуге, запрошенной в дескрипторе соединения

Я протестировал соединение, TNSPing которое было разрешено правильно, и попытался SQLPlus установить соединение, которое не удалось с той же ошибкой, что и выше Я использовал этот синтаксис для SQLPlus :

Мы убедились, что:

  • прослушиватель TNS на сервере работает.
  • Сам Oracle на сервере работает.

Мы не знаем о каких-либо изменениях, которые были сделаны в этой среде. Что-нибудь еще мы можем проверить?

Какую команду TNSPing (с параметрами) вы использовали? когда вы говорите «работает локально», вы имеете в виду, что приложение подключается к базе данных на том же хосте? Кроме того, каково содержимое вашего файла sqlnet.ora? какие версии указаны для sqlplus и tnsping, и вы уверены, что они находятся в одном и том же ORACLE_HOME? попробуйте перезапустить базу данных. Так как они должны сообщить Слушателю об их существовании при запуске, это может решить вашу проблему. ALTER SYSTEM REGISTER менее радикальна, чем перезапуск базы данных.

У меня возникла эта проблема, и исправление состояло в том, чтобы убедиться, что в вашей базе данных tnsnames.ora указано SERVICE_NAME правильное имя службы. Чтобы узнать действительные имена сервисов, вы можете использовать следующий запрос в Oracle:

Однажды я обновился tnsnames.ora до:

тогда я побежал:

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

(* Я запускал sqlplus с клиентской рабочей станции Win7 на удаленную БД и обвинял администраторов БД;) *)

Как я могу запросить БД, если я не могу даже подключиться к ней? Можете ли вы напрямую подключиться к серверу БД и запустить оттуда sqlplus? это может быть не тот случай, когда несколько клиентов / серверов установлены или использовались для установки на одном компьютере. (tnsping выводит местоположение каталога, который он использует) - в моем случае, listener.ora в этом каталоге содержал информацию, относящуюся к старому экземпляру базы данных, который я удалил - быстрым и грязным способом было скопировать все содержимое listener.ora из моя текущая установка Oracle Express в этот другой каталог, который слушатель, кажется, проверяет (я думаю, что я изменил его через реестр или что-то в этом роде, и он имеет приоритет над ORACLE_HOME (?))

Я знаю, что это старый вопрос, но все еще без ответа. Это заняло у меня целый день исследований, но я нашел самое простое решение, по крайней мере, в моем случае (Oracle 11.2 в Windows 2008 R2) и хотел поделиться им.

Ошибка, если смотреть непосредственно, указывает, что слушатель не распознает имя службы. Но где он хранит названия сервисов? В %ORACLE_HOME%\NETWORK\ADMIN\listener.ora

«SID_LIST» - это просто список SID и имен сервисов в паре в формате, который вы можете скопировать или найти.

Я добавил проблему Service Name, затем в панели управления Windows «Службы» произвел «Перезапуск» в службе прослушивания Oracle. Теперь все хорошо.

Например, ваш файл listener.ora может изначально выглядеть так:

. И чтобы он распознал имя службы orcl , вы можете изменить его на:

vapcguy, вы должны быть на сервере базы данных. Похоже, вы на клиенте Следуя инструкциям Sepideh, касающимся сетевого менеджера, я заметил, что мой файл listeners.ora был обновлен и теперь содержит новую запись SID_LIST. Я отредактировал этот ответ, чтобы включить пример синтаксиса «до и после» для читателей, которые по какой-либо причине не могут использовать Net Manager.

У меня была эта проблема на Windows Server 2008 R2 и Oracle 11g

перейдите в Net Manager> Слушатель> выберите службы баз данных из поля со списком> «Глобальное имя базы данных» должно совпадать с «SID», а «Oracle Home Directory» должен быть правильным.

Если у вас нет записей для служб баз данных, создайте их и задайте правильную глобальную базу данных sid и oracle home.

Мой дескриптор в tnsnames.ora :

Итак, приступаю к регистрации сервиса в listener.ora ручном режиме:

Наконец, перезапустите слушатель по команде:

Запуск OracleServiceXXX из services.msc работал для меня в Windows.

В Windows, если вы используете Oracle Release 12.x, убедитесь, что служба OracleServiceORCL запущена. Если эта служба не запущена, то вы также получите тот же код ошибки.

Это действительно должен быть комментарий к ответу Брэда Риппе , но, увы, недостаточно реп. Этот ответ дал мне 90% пути туда. В моем случае установка и настройка баз данных помещают записи в файл tnsnames.ora для баз данных, которые я запускал. Во-первых, я смог подключиться к базе данных, установив переменные среды (Windows):

а затем подключение с помощью

Далее запустим команду из ответа Брэда Риппе:

показал, что имена не совпадают точно. Записи, созданные с помощью Oracle Database Configuration Assistant, где изначально:

Я перезапустил службу прослушивателя TNS (я часто использую lsnrctl stop и lsnrctl start из командного окна администратора [или Windows Powershell] вместо панели управления службами, но оба работают.) После этого я смог подключиться.

У меня такая же проблема. Для меня просто пишу

сделал трюк, делая так, он подключается к имени службы по умолчанию, я думаю.

У нас была похожая проблема с нашей строкой соединения, вызывающая эту ошибку. Мы подключали с помощью тонкого драйвера Oracle, JDBC со строкой подключения: jdbc:oracle:thin:@//localhost:1521/orcl . Скорректированная строка подключения , чтобы устранить эту ошибку было: jdbc:oracle:thin:@localhost:1521 . это зависит от того, сработает ли это - я думаю, что этот способ подключения, судя по тому, что говорили другие, полностью обходит слушателя, используя имя хоста компьютера вместо SID - этот способ подключения вызывает проблемы у сторонних клиентов, - я думаю, это также работает, только когда EZCONNECT указан в sqlnet.ora: NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)

То, что работало для меня, было действительно простым, мне просто нужно было вручную запустить службу в «Службах Windows» (services.msc в cmd trompt). мое сервисное имя: OracleServiceXXXXX.

В моем случае, хотя Тип запуска установлен на Автоматический, он не запускается при загрузке компьютера. После запуска вручную службы «OracleServiceXE» она работает с Oracle Database 11g Express для подключения к БД и веб-странице APEX (Oracle Application Express).

Проверьте, что база данных работает. Войдите на сервер, задайте для переменной среды ORACLE_SID SID базы данных и запустите SQL * Plus в качестве локального соединения.

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

Эта ошибка может возникать, когда приложение устанавливает новое соединение для каждого взаимодействия с базой данных или соединения не закрываются должным образом. Одним из бесплатных инструментов для мониторинга и подтверждения этого является Oracle Sql developer (хотя это не единственный инструмент, который вы можете использовать для мониторинга сеансов БД).

Вы можете скачать инструмент с сайта оракула Sql Developer

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

введите описание изображения здесь

Я решил эту проблему в своей среде linux, обновив IP-адрес моей машины в файле / etc / hosts.

Вы можете проверить свой сетевой IP (inet end.) С помощью:

Посмотрите, совпадает ли ваш IP с файлом / etc / hosts:

Отредактируйте файл / etc / hosts, если он подключен:

это старый, но нет смысла добавлять ваш IP в / etc / hosts. ОП отсутствует SERVICE_NAME, другие вещи совершенно не связаны

Для тех, кто может использовать Oracle на виртуальной машине (например, я), я видел эту проблему, потому что моей виртуальной машине не хватало памяти, что, по-видимому, препятствовало правильному запуску / запуску OracleDB. Увеличение моей виртуальной памяти и перезапуск исправили проблему.

Для меня ошибка 12514 была решена после указания правильного SERVICE_NAME. Вы обнаружите, что на сервере в файле, tnsnames.ora который поставляется с 3 предопределенными именами служб (одно из них «XE»).

Если SERVICE_NAME=XE вы ошиблись, вы получите ошибку 12514. Это SERVICE_NAME необязательно. Вы также можете оставить это в стороне.

Большое спасибо, из вашего решения я нашел хитрость, в моем случае это был антивирус, который блокировал программу, и поэтому не смог получить соединение с Oracle db.

Я также столкнулся с той же самой проблемой и потратил 3 дня, чтобы выкопать это.

Это происходит из-за неправильного входа в службу TNS.

Сначала проверьте, можете ли вы подключиться к резервной базе данных из первичной базы данных, используя sql> sqlplus sys@orastand as sysdba ( orastand резервная база данных).

Если вы не можете подключиться, то это проблема с сервисом. Исправьте запись имени службы в файле TNS на первичном конце.

Проверьте резервную базу данных таким же образом. Внесите изменения и здесь, если требуется.

oracle.manageddataaccess.dll это файл библиотеки динамических ссылок, который является частью разработанный Корпорация Oracle, Версия программного обеспечения: обычно о по размеру, но версия у вас может отличаться. Файлы DLL - это формат файлов для динамических библиотек, который используется для хранения нескольких кодов и процедур для программ Windows. Файлы DLL были созданы, чтобы позволить нескольким программам использовать их информацию одновременно, тем самым сохраняя память. Это также позволяет пользователю изменять кодировку нескольких приложений одновременно, не изменяя сами приложения. Библиотеки DLL могут быть преобразованы в статические библиотеки с помощью дизассемблирования MSIL или DLL в Lib 3.00. Формат файла .exe файлов аналогичен формату DLL. Файлы DLL, и оба типа файлов содержат код, данные и ресурсы.

Наиболее важные факты о oracle.manageddataaccess.dll:

  • Имя: oracle.manageddataaccess.dll
  • Программного обеспечения: Primavera P6 Professional
  • Издатель: Корпорация Oracle
  • URL издателя:
  • Файл справки:
  • Известно, что до 498.87 KB по размеру на большинстве окон;

Oracle.manageddataaccess.dll безопасный или это вирус или вредоносное ПО?

Ответ - нет, сам по себе oracle.manageddataaccess.dll не должен повредить ваш компьютер.

В отличие от исполняемых программ, таких как программы с расширением EXE, файлы DLL не могут быть выполнены напрямую, но должны вызываться другим кодом, который уже выполнен. Тем не менее, DLL имеют тот же формат, что и EXE, и некоторые могут даже использовать расширение .EXE. В то время как большинство динамических библиотек заканчиваются расширением .DLL, другие могут использовать .OCX, .CPL или .DRV.

Файлы DLL полезны, потому что они позволяют программе разделять свои различные компоненты на отдельные модули, которые затем могут быть добавлены или удалены для включения или исключения определенных функций. Если программное обеспечение работает таким образом с библиотеками DLL, программа может использовать меньше памяти, поскольку ей не нужно загружать все одновременно.

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

Вот почему обычно, когда вы видите новый файл .dll на вашем компьютере, где-то будет файл .exe.

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

Могу ли я удалить или удалить oracle.manageddataaccess.dll?


Согласно различным источникам онлайн, 3% людей удаляют этот файл, поэтому он может быть безвредным, но рекомендуется проверить надежность этого исполняемого файла самостоятельно, чтобы определить, является ли он безопасным или вирусом.

Программные программы хранят файлы DLL в одной или нескольких папках во время установки. Эти файлы содержат код, который объясняет работу программ.

Если вы планируете удалить oracle.manageddataaccess.dll, вероятно, лучше оставить его в покое. Причина этой логики заключается в том, что некоторые программы совместно используют эти файлы, поэтому удаление определенного файла DLL может непреднамеренно вызвать проблемы. Это означает, что удаление oracle.manageddataaccess.dll может привести к прекращению работы одной или нескольких других программ или только в ограниченной степени.

Некоторые программы также могут устанавливать файлы DLL в несколько папок вне папки Program Files (где установлено большинство программ). Поиск этих DLL-файлов может быть очень трудным, а удаление их может быть опасным.

Как уже упоминалось выше, если вы не уверены, что oracle.manageddataaccess.dll используется другой программой, мы рекомендуем оставить его в покое. Однако, если вам нужно удалить файл, мы рекомендуем сначала сделать копию. Если после этого у вас возникнут проблемы с другой программой, требующей использования недавно удаленного DLL-файла, вы можете восстановить файл из резервной копии.


  • Не удалось запустить приложение, так как файл oracle.manageddataaccess.dll не был найден. Переустановка приложения может решить проблему.
  • oracle.manageddataaccess.dll не найден
  • oracle.manageddataaccess.dll отсутствует
  • Обязательная DLL-библиотека oracle.manageddataaccess.dll не найдена
  • Приложение или oracle.manageddataaccess.dll не является допустимым образом Windows
  • oracle.manageddataaccess.dll отсутствует или поврежден
  • Не удается найти oracle.manageddataaccess.dll
  • Не удается запустить oracle.manageddataaccess.dll. Отсутствует необходимый компонент: oracle.manageddataaccess.dll. Пожалуйста, установите oracle.manageddataaccess.dll снова.

Обновлено ноябрь 2021 г .:

Мы рекомендуем вам попробовать этот новый инструмент. Он исправляет множество компьютерных ошибок, а также защищает от таких вещей, как потеря файлов, вредоносное ПО, сбои оборудования и оптимизирует ваш компьютер для максимальной производительности. Это исправило наш компьютер быстрее, чем делать это вручную:

скачать


(опциональное предложение для Reimage - Cайт | Лицензионное соглашение | Политика конфиденциальности | Удалить)

Если oracle.manageddataaccess.dll отсутствует или поврежден, это может повлиять на многие приложения, включая операционную систему, что может помешать вам выполнять свою работу или использовать критические функции в критически важных программах.

Запустить SFC

SFC для поврежденной DLL

Самый безопасный способ восстановить отсутствующий или поврежденный файл oracle.manageddataaccess.dll, вызванный вашей операционной системой Windows, - запустить встроенную проверку системных файлов, которая заменяет отсутствующие или поврежденные системные файлы.

Для этого щелкните правой кнопкой мыши кнопку «Пуск» на компьютере Windows 10, чтобы открыть меню WinX, и щелкните ссылку «Командная строка (администратор)».

В окне CMD скопируйте следующую команду и нажмите Enter:

Сканирование может занять 10 минут, и если оно успешно завершено, вы должны перезагрузить компьютер. Запуск sfc / scannow в безопасном режиме или при запуске может дать лучшие результаты.

Обновить драйверы

Обновление-драйверы

Иногда, при использовании аппаратного обеспечения, такого как принтер, вы получаете отсутствующую ошибку файла oracle.manageddataaccess.dll. Эта ошибка может быть связана с более старой версией драйвера, который не совместим с обновленным файлом DLL, поэтому принтер ищет неправильный файл DLL и не может его найти.

Обновите драйверы вашего устройства, чтобы увидеть, решит ли это проблему.

Восстановление при загрузке

инструмент для восстановления при запуске

Восстановление при загрузке - это еще один способ восстановить все файлы .dll, такие как oracle.manageddataaccess.dll, до их первоначального рабочего состояния. Однако это исправление может вызвать проблемы в других программах, особенно если программа обновила файлы .dll.

Загрузите или переустановите oracle.manageddataaccess.dll

заменить отсутствующие файлы DLL

В большинстве учебников и руководств авторы предупреждают своих читателей, чтобы они не загружали отсутствующие файлы oracle.manageddataaccess.dll со случайных и непригодных для использования веб-сайтов, которые могут предоставить им вредоносное ПО. Это не без причины, конечно. Правда состоит в том, что в Интернете полно сайтов, которые обещают пользователям решить их проблемы, открыв определенные приложения или программы как можно скорее. К сожалению, очень немногие могут действительно оправдать ваши ожидания.

Хотя эта проблема встречается реже, потенциально гораздо более серьезная проблема заключается в том, что библиотеки DLL, которые вы загружаете из источников, отличных от поставщика, иногда могут быть загружены вирусами или другими вредоносными программами, которые могут заразить ваш компьютер. Это особенно верно для веб-сайтов, которые не слишком заботятся о том, откуда берутся их файлы. И это не так, как будто эти сайты сделают что-нибудь, чтобы рассказать вам о своих источниках высокого риска.

Ошибка проявляется в виде исключения при установлении соединения Object Referenced Not Set to an instance of an Object. Причина возникновения ошибки в том, что идентификатор пользователя контейнера генерируется динамически (при старте контейнера) и, следовательно, у него не будет связи в /etc/password. Это и вызывает проблемы для приложений, которые ожидают (в нашем случае это NuGet пакет), что смогут найти идентификатор пользователя. (При запуске контейнера в привилегированном режиме такой ошибки не возникает, так как мы работаем под root у которого есть ассоциированная с ним запись в /etc/password/).

Решение.
Одним из способов решения этой проблемы является динамическое создание записи в /etc/password с идентификатором пользователя контейнера в процессе разворачивания образа.

Пример.
dockerfile
.
.


3. Поведение метода Close класса OracleConnection.

Согласно документации, как бы это не было очевидно, метод закрывает соединение до базы. Но в замечаниях к этому методу, в одном из пунктов указано, что соединение (не закрывается!) возвращается в пул при условии что пул коннектов включен (что является поведением по умолчанию). Так же сказано что время жизни коннекта в пуле можно так же ограничить по времени с помощью команды строки подключения. Если пул коннектов выключен, то соединение закрывается. Подобное поведение по умолчанию приводит к тому что при частом обновлении пакетов на базе, может возникнуть оракловая ошибка ORA-04068: existing state of packages has been discarded. И если такое поведение не ожидается или не обрабатывается в вызываемом коде, то это может привести к неприятным последствиям.

Решение.
Учитывая требования к моему сервису (на котором я столкнулся с такой ошибкой), приемлемым вариантом решения было просто отключения пулинга коннектов.


4. Ошибка при нарушении порядка передачи аргументов процедуре/функции.

Ошибка проявляется в виде исключения при вызове процедуры/функции PLS-00306: wrong number or types of arguments in call to 'PROC'. Как показала практика при добавлении параметров OracleCommand.Parameters.Add(. ) очень важен порядок, который должен соответствовать объявлению аргументов в процедуре/функции, при нарушении порядка будет выброшено указанное исключение.

Решение.
У OracleCommand есть свойство BindByName, устанавливаем его в true и радуемся жизни, либо как сказано выше соблюдаем порядок)

Читайте также: