Perl-скрипт вызывает ошибку oci.dll, DBD

У меня есть сценарий perl, который подключается к базе данных Oracle, открывает текстовый файл и загружает данные из файла в таблицу базы данных, сценарий отлично работает на моей машине разработки (32-разрядная версия Windows XP), однако, когда я загружаю сценарий в производственный сервер (Windows 2003 64 бит) и запустить его из командной строки, он открывает perl.exe - не удается найти окна компонентов, говорится в сообщении.

Не удалось запустить это приложение, потому что не найден OCI.dll. Переустановка приложения может решить проблему.

Вывод командной строки:

install_driver (Oracle) не удалось: не удалось загрузить C: /Perl64/lib/auto/DBD/Oracle/Oracle.dll для модуля DBD :: Oracle: load_file:% 1 не является допустимым приложением Win32 в C: / Perl64 /lib/DynaLoader.pm строка 191. at (eval 14) line3 Ошибка компиляции в require в строке 3 (eval 14). 15

Я переустановил клиент oracle, я попытался удалить как активный perl, так и клиент oracle, а затем установить клиент oracle до того, как Perl услышал, что это может вызвать проблему.

Я подумал, что это могут быть разрешения, поэтому я написал простой скрипт perl для открытия в oci.dll и вызвал ошибку, если не смог, он смог открыть его правильно.

Я убедился, что C: \ oracle \ product \ 10.2.0 \ client_1 \ bin находится в переменной окружения PATH.

Я могу подключиться к базе данных с помощью SQLPlus

Я добавил OCI.dll в тот же каталог, что и сценарий perl.

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

Подробности Сервер работает под управлением ActivePerl 5.14.1 Build 1401 (64-разрядная версия) База данных Oracle - 10g Клиент Oracle - 10.2.0


person RobLaw84    schedule 27.07.2011    source источник


Ответы (2)


У меня была аналогичная проблема, но для 64-битной версии Perl. Мне удалось решить эту проблему, получив нужные клиентские библиотеки и прочитав это руководство:
http://www.pythian.com/news/11115/dbdoracle-and-windows-64bit/

По сути, я использую Oracle 11g XE R2, который поставляется только с 32-разрядной версией. Поэтому я подозревал, что он искал 64-битные клиентские библиотеки, а не находил их. Итак, я загрузил:
Instantclient-basic-windows.x64-11.2.0.3.0.zip
Instantclient-sqlplus-windows.x64-11.2.0.3.0.zip
Instantclient-sdk-windows.x64 -11.2.0.3.0.zip
От:
http://www.oracle.com/technetwork/topics/winx64soft-089540.html
И установлен в c: \ oraclexe \ instantclient_11_2

Я добавил их в свой путь:
C:> set PATH = c: \ oraclexe \ instantclient_11_2;% PATH%
Но, к сожалению, ошибка не исчезла :(

При проверке моего PATH:
echo% PATH%
я увидел, что набор игнорируется. Я предполагаю, что это была проблема с разрешениями.

Поэтому я отредактировал переменную системного пути и перезапустил командную строку. Это устранило проблему и позволило мне подключиться :)

person Cosmicnet    schedule 20.01.2013
comment
потрясающе, не могу поверить, что я каким-то образом загрузил 32-битный мгновенный клиент ... их система загрузки не предоставляет ссылку с обычной 32-битной страницы загрузки на 64-битную, так что, если Google вас прямо до 32-битной, никогда не знаешь, что она вообще существует ... - person rogerdpack; 30.04.2014

Вы смешали 32-битные и 64-битные компоненты? Очевидно, вам нужны 64-битные Perl, 64-битные DBI и DBD :: Oracle и 64-битные библиотеки DLL для клиента Oracle. Я предлагаю вам только проверить, так как в сообщении об ошибке указано «не является допустимым приложением Win32 в».

person bohica    schedule 27.07.2011