dbi :: Ошибка Oracle при запуске из cron - PullRequest
2 голосов
/ 25 июня 2010

Привет! Я использую DBD :: Oracle в своем скрипте для запроса к базе данных Oracle. Когда я запускаю этот скрипт, он работает нормально, но когда я планирую запустить его из cron, он выдаёт ошибку ниже 1001 *

install_driver(Oracle) failed: Can't load '/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libnnz10.so: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230.
 at (eval 3) line 3
Compilation failed in require at (eval 3) line 3.
Perhaps a required shared library or dll isn't installed where expected
 at /scripts/db/dbquery.pl line 50

Строка 50:

my $dbh = DBI->connect("dbi:Oracle:$tns","$dbuser","$dbpass");

Подскажите пожалуйста, как это исправить.

Ответы [ 2 ]

2 голосов
/ 25 июня 2010

Звучит так, как будто для cron не заданы обязательные переменные среды Oracle (см. Комментарий к ответу амфетамина).

Посмотрите на этот ответ на вопрос SO: Как я могу использовать сервер базы данных из сценария Perl CGI? для получения некоторых рекомендаций.

Для справки посмотрите, какие переменные Oracle ENV вы установили в своем профиле входа:

env | grep -i oracle

Практически все, что вы видите здесь, должно быть задано как переменные $ ENV {} в вашем скрипте Perl или в зависимости от используемой версии cron, это также может быть добавлено в ваш файл crontab:

ORACLE_HOME=/home/oracle/product/10.x.x
* * * * * /path/to/your/script.pl

/ I3az /

0 голосов
/ 25 июня 2010

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

Следует отметить, что Oracle является проприетарной и не совместимой с GPL, поэтому почти ни один дистрибутив Linux не сделает его доступным через свой репозиторий. Это означает, что вам, вероятно, придется установить его самостоятельно.

Редактировать: Убедитесь, что LD_CONFIG_PATH указывает на каталог, в котором находится библиотека.

Кроме того, вы можете просто добавить строку к /etc/ld.so.conf, указав путь к клиентским библиотекам Oracle.

...