воскресенье, 30 января 2011 г.

Установка ODAC на Windows 7 x64

На днях потребовалось установить Oracle Data Access Components (ODAC) на Windows 7 x64. Кажется на первый взгляд, что ничего такого сложного. А не тут то было. Проблем, в процессе установки, оказалась масса. Хочу поделиться с Вами какие проблемы возникали и как я их решал, в надежде сэкономить наше с вами драгоценное время, потратив его на решение поставленных перед нами задач.


Во-первых, при попытке установить ODAC под Windows 7 x64 установочник от 64-bit Oracle 10g Release 2 ODAC 10.2.0.3 for Windows x64 попросту не запускается, выкидывая следующую ошибку:
Java 2 platform Standard Edition binary has stopped working. Windows can check...
Даже переустановка Windows проблемы не решила.

Во-вторых, если вы собираетесь писать Wcf-сервис с использованием ODAC, то WCF Test Client с ODAC x32 работать не будет. Например следующий код в консоли работает:

static void Main(string[] args)
        {
            //DATA SOURCE=XE;DBA PRIVILEGE=SYSDBA;USER ID=SYS
            OracleConnectionStringBuilder conStr = new OracleConnectionStringBuilder();
            conStr.DataSource = "XE";
            conStr.DBAPrivilege = "SYSDBA";
            conStr.UserID = "SYS";
            conStr.Password = "12345";
 
            string ver = "";
            using (OracleConnection con = new OracleConnection(conStr.ToString()))
            {
                con.Open();
                ver = con.ServerVersion;
                con.Close();
            }
        }

А если его перенести в Wcf-сервис, то все перестает работать. При вызове метода из сервиса через WCF Test Client выскакивает такая ошибка от WCF Test Client'а:
Could not load file or assembly 'Oracle.DataAccess, Version=4.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. Была сделана попытка загрузить программу, имеющую неверный формат.

Замена битности конфигурации сервиса с x64 на x86 не поможет, сервис просто падает с сообщением от WCF Client Test:
System.BadImageFormatException: Could not load file or assembly 'file:///C:\Users\Svat\Documents\Visual Studio 2010\Projects\СУРБД\Services\OracleServerWcfService\bin\Debug\OracleServerWcfService.dll' or one of its dependencies. Была сделана попытка загрузить программу, имеющую неверный формат.

Если я запускаю WCF-сервис хоститься, например, в консольном приложении, в конфигурации которого выставлена компиляция под 32 бит то все будет работать. Более подробно проблема с ODAC x32 в 64-х битном WCF Test Client решена на форуме msdn: Не возможно загрузить сборку Oracle.DataAccess.

Долго копался в инете и долго ничего дельного найти не мог. Пока не наткнулся на эту страничку:
Доступ к Oracle из ASP.NET. Которая мне открыла глаза. Я долго не мог понять, почему последний ODAC (64-bit ODAC 11.2 Release 3 (11.2.0.2.1) for Windows x64) весил в 4 раза меньше чем предыдущий, но раз люди говорят, что все работает, то надо скачать и тоже попробовать поставить.

Скачал. Немного почитал мануал по установке. Все написано доходчиво и понятно, что не может не радовать. Установил. Все встало с первой попытки. Единственный минус, это в Visual Studio надо ручками по полному пути к сборке выбрать ее, чтобы подключить к проекту.

После установки так же надо добавить системную переменную окружения  ORACLE_HOME с указанием пути до папки клиента. А в папке клиента создать поддиректорию: \network\admin, где должны располагаться конфигурационные файлы (sqlnet.ora, tnsnames.ora).

Теперь дальше.

Сборка, это конечно хорошо, но хотелось бы иметь полный доступ к Oracle из Visual Studio. Для этого необходимо установить Oracle Developer Tools for Visual Studio. Из тех, что я нашел, все последние версии шли в комплекте с ODAC x32. принципе ничего плохого в этом нету. Будет возможность привычными способами добавить ссылку в проекте на x32 сборку для подключения к Oracle. Плюс инструменты для работы с Oracle прямо из интерфейса самой Visual Studio. Смело скачал и стал устанавливать. И на 94% установки вылетела ошибка. Если честно, то все эти ошибки меня стали на тот момент уже очень сильно раздражать. Текст ошибки выглядел следующим образом:
OLE initialization or OCX load error while registering OCX.

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

Теперь, наконец-то, после долгой нервотрепки, все было успешно установлено. Впринципе, это все, что требуется для успешной работы с Oracle из своего приложения или из интерфейса Visual Studio.

Очень надеюсь, что статья поможет многим сберечь свое ценное время.

3 комментария:

  1. То есть 64-bit Oracle 10g Release 2 ODAC 10.2.0.3 for Windows x64 поставить под Windows 7 x64 невозможно?

    ОтветитьУдалить
  2. Да. Скорее всего дистрибутив просто содержит в себе ошибку. Поэтому, если необходимо поставить ODAC на 64'битную платформу, то лучше воспользоваться пакетом ODAC112021Xcopy_x64.zip (редакция Xcopy). Его особенность в том, что его достаточно просто скопировать, зарегистрировать в реестре и создать переменную окружения. Если нужен инструментарий для работы с СУБД Oracle из Visual Studio, то просто установите еще ODTwithODAC112021.zip. Там в комплекте с инструментами идет еще ODAC для 32'битной платформы, но это не страшно.

    ОтветитьУдалить
  3. Oracle 10 x32 (х64 не пробовал) прекрасно становится как на Семёрку, так и на Восьмёрку внутрь 32ной подсистемы. Устанавливать надо: правой кнопкой мыши на SETUP.ЕХЕ, пункт меню В РЕЖИМЕ СОВМЕСТИМОСТИ, кнопка ИСПОЛЬЗОВАТЬ РЕКОМЕНДОВАННЫЕ ПАРАМЕТРЫ, кнопка ЗАПУСТИТЬ ПРОГРАММУ (в Восьмёрке кнопка переименована, но работает так-же). Запускается установщик, и когда запустится графическая оболочка мастера установки, окно совместимости можно закрывать нажатием "крестика" в углу рамки окна (или сначала пройти 1-2 шага в мастере для фактически успокоения нервов:).

    ОтветитьУдалить