Требуется ли ODP.NET для клиента Oracle 11g? - PullRequest
8 голосов
/ 21 июля 2009

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

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

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

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

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

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

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

Edit:

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

Ответы [ 6 ]

9 голосов
/ 27 августа 2009

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

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

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

3 голосов
/ 21 декабря 2012

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

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

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

1 голос
/ 19 августа 2009

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

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

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

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

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

1 голос
/ 22 июля 2009

Я думаю, что сообщение "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, чтобы проверить, возможно ли это.

0 голосов
/ 22 июля 2009

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

0 голосов
/ 21 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...