2015-11-15 5 views
0

У меня есть сценарий CGI Perl, который будет запускать инструкцию select из базы данных Oracle для получения записей. Эти скрипты работают на Apache с привязкой cgi-bin. Он работал нормально.Ошибка запроса базы данных Oracle из CGI Perl-скрипта

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

install_driver(Oracle) failed: Can't load '/u02/system/perl/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.11.1: cannot open shared object file: No such file or directory at /u02/system/perl/usr/lib64/perl5/DynaLoader.pm line 200. 

Я проверил мои ORACLE_HOME и LD_LIBRARY_PATH переменные и оба они указывают на правильный клиент оракула. Также попробуйте locate libclntsh.so.11.1 и удалось найти файл в правильном каталоге с предоставленным разрешением.

Также добавлен oracle.conf файл, путь к оракулу Lib каталога в /etc/ld.so.conf.d

Все эти и еще он показывает ту же ошибку. У меня заканчиваются идеи ....

Любые указатели или предложение оценены. Спасибо.

ответ

0

Вы уже исчерпали основы, которые хороши: убедитесь, что библиотеки существуют, убедитесь, что ваша программа имеет права на чтение/выполнение и устанавливает переменные среды для ORACLE_HOME и LD_LIBRARY_PATH.

Вам нужно проверить рекурсивные зависимости.

ldd /u02/system/perl/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so 

должен показать вам любые зависимости .so, которые нельзя загрузить. DBD :: Oracle также зависит от версии клиента Oracle. Если версия или местоположение клиента Oracle изменилась (или когда все остальное не работает), вам может потребоваться перекомпилировать DBD :: Oracle.

+0

спасибо. кажется, проблема заключается в том, что после добавления 'oracle.conf' в путь ldd мне нужно будет выполнить команду' ldconfig', чтобы обновить ее. ваши подсказки для запуска 'ldd' обеспечивают понимание, спасибо. – ipohfly