Требуется ли ODP.NET для клиента Oracle 11g?

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

У меня есть проект, в котором используется поставщик Microsoft.NET Oracle (наш план - перейти на ODP, но мы еще не сделали этого).

Я пытаюсь получить этот проект для сборки на сервере сборки Windows 2008 (x64). Он прекрасно работает, но наши модульные тесты не работают, когда они попадают в базу данных Oracle.

Первоначально я установил 32-битный клиент Oracle 9i, который мы сейчас используем на наших устройствах winxp dev и на предыдущем сервере сборки 2003 года. Но теперь появляется следующее сообщение: Попытка загрузить клиентские библиотеки Oracle вызвала исключение BadImageFormatException. Эта проблема возникает при работе в 64-битном режиме с установленными 32-битными клиентскими компонентами Oracle.

Мы попытались скомпилировать для платформы x86, но это не изменило сообщение об ошибке.

Теперь у меня установлен 64-битный клиент 11g, но я получаю сообщение о том, что System.Data.OracleClient требует клиентского программного обеспечения Oracle версии 8.1.7 или выше.

Так какую установку Oracle я должен использовать?

Редактировать:

Я смог заставить это работать. Оказалось, что именно тестирование вызвало проблему, заставив NUnit работать в 32-битном режиме: http://geekswithblogs.net/Lance/archive/2006/12/28/102191.aspx Я смог заставить тесты работать, используя старый 32-битный драйвер. Это было бы дурацким ответом на вопрос, поэтому я им не пользуюсь, но с удовольствием предоставлю правильный ответ любому, кто внесет полезную информацию о переходе на драйверы Oracle 64bit.

6 ответов

Решение

Что касается Oracle, мне нравится использовать Oracle Instant Client:

  • Вам не нужно ничего устанавливать на целевых машинах (в том числе на устройствах разработчика!).
  • Вы можете убедиться, что ваше приложение будет работать с выбранным вами клиентом.
  • Вы даже можете легко иметь несколько приложений, работающих с разными версиями клиента на одном компьютере.
  • Как недостаток, он добавляет значительный вес вашему приложению (минимум 19 Мб).

Проверьте, какой минимальный размер клиента требуется для подключения C# к базе данных Oracle? для дополнительной информации. Чтобы узнать, как настроить проект Visual Studio, который будет работать как на компьютерах с архитектурой x86, так и на компьютерах с архитектурой x64, ознакомьтесь с публикацией моего блога Oracle Instant Client в Visual Studio.

Я добавляю новый ответ, поскольку с осени 2012 года доступна бета-версия управляемого кода ODP. Смотрите эту ссылку для получения дополнительной информации. Он для нас очень стабилен, и мы используем его в производстве, в основном по следующим причинам:

  • Не требует установки (кроме структуры сущностей, где требуется простая регистрация)
  • Это меньше, чем неуправляемая версия, занимает около 6 МБ.
  • Это НЕ "битно-чувствительный", то есть любой ЦП, наконец, будет работать с ODP:)
  • Более интуитивное отображение типов C# <-> типов Oracle (и это решило некоторые проблемы с EF и генерацией модели из базы данных)
  • Поддерживает EZCONNECT (все версии неуправляемого ODP этого не сделали), т.е. больше никаких проблем с tnsnames.ora.

Но для перехода на 64-разрядную версию загрузите драйвер управляемого ODP и измените Oracle.DataAccess ссылка на Oracle.ManagedDataAccess и перекомпилировать:)

Я думаю, что сообщение "System.Data.OracleClient требует клиентского программного обеспечения Oracle версии 8.1.7 или выше", оно похоже на "клиент Oracle не установлен, не установлен, но не найден или установлен, но необходим 8.1.7 или выше".

Проверьте на regedit, находятся ли значения прямо под ключом:

 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraOdac11g_home1

куда OraOdac11g_home1 зависит от имени Oracle Home для вашей установки.

Кроме того, попробуйте подключиться через Visual Studio, чтобы увидеть, если это возможно.

У меня была проблема, которая могла касаться того, что вы видите.

Первоначально на моем компьютере был установлен только клиент Oracle 10g, а номер версии компонента.Net Oracle.DataAccess был 10.2.0.100 - это было для.Net runtime v1.0.3705

Я установил ODP.Net, и версия компонента Oracle.DataAccess теперь v2.102.2.20 и работает на.Net runtime v2.0.50727 - я не могу найти ссылку на то, почему Oracle сделал это - это было связано с приведением номеров версий в соответствии с версией выполнения

Мне потребовался день, чтобы решить это. Мы еще не используем клиент 11g, и я не использовал клиент 8i целую вечность, поэтому я не знаю, какими будут номера версий для этих клиентов, но я бы проверил, если бы я был вами.

Короче говоря, Oracle отслеживал номера версий компонентов, которые могли сделать ваш компонент 11g устаревшим, в отличие от компонентов Oracle 8i.

Я много раз обнаруживал, что ошибка "требуется клиентское программное обеспечение Oracle версии 8.1.7 или выше" является заведомо вводящей в заблуждение ошибкой. Из далекой памяти я, кажется, помню, что это обычно указывает на проблему с правами доступа к файлам. Я думаю, что это может быть связано с тем, что рабочий процесс ASP.NET (или какой-либо другой идентификатор, под которым выполняется приложение) требует какого-то разрешения на чтение или запись в папку в иерархии папок клиента oracle...

Это может быть причиной нескольких домов оракулов в окружающей среде. Удалите старую версию oracle home из вашей системы сборки. попробуйте сгенерировать сборку снова с одним домом. Есть некоторые проблемы с 9i версией ODP.NET и подключением 10G/11G

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