На днях потребовалось установить 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_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.
Очень надеюсь, что статья поможет многим сберечь свое ценное время.
То есть 64-bit Oracle 10g Release 2 ODAC 10.2.0.3 for Windows x64 поставить под Windows 7 x64 невозможно?
ОтветитьУдалитьДа. Скорее всего дистрибутив просто содержит в себе ошибку. Поэтому, если необходимо поставить ODAC на 64'битную платформу, то лучше воспользоваться пакетом ODAC112021Xcopy_x64.zip (редакция Xcopy). Его особенность в том, что его достаточно просто скопировать, зарегистрировать в реестре и создать переменную окружения. Если нужен инструментарий для работы с СУБД Oracle из Visual Studio, то просто установите еще ODTwithODAC112021.zip. Там в комплекте с инструментами идет еще ODAC для 32'битной платформы, но это не страшно.
ОтветитьУдалитьOracle 10 x32 (х64 не пробовал) прекрасно становится как на Семёрку, так и на Восьмёрку внутрь 32ной подсистемы. Устанавливать надо: правой кнопкой мыши на SETUP.ЕХЕ, пункт меню В РЕЖИМЕ СОВМЕСТИМОСТИ, кнопка ИСПОЛЬЗОВАТЬ РЕКОМЕНДОВАННЫЕ ПАРАМЕТРЫ, кнопка ЗАПУСТИТЬ ПРОГРАММУ (в Восьмёрке кнопка переименована, но работает так-же). Запускается установщик, и когда запустится графическая оболочка мастера установки, окно совместимости можно закрывать нажатием "крестика" в углу рамки окна (или сначала пройти 1-2 шага в мастере для фактически успокоения нервов:).
ОтветитьУдалитьПо указанной линке содержиться скрипт для генерации текущих переменных окружения (environment) для базы данных.
ОтветитьУдалитьТак же в нем имеется хороший пример файла среды для базы данных.
http://dbpilot.net/2018/01/30/generating-an-enviroment-file-from-pl-sql/
...