0

環境:

Red Hat Enterprise Linux Server release 6.4 
Apache/2.2.15 (Unix) mod_perl/2.0.4 Perl/v5.10.1
Perl v5.10.1 (*) built for x86_64-linux-thread-multi
64 bit Oracle client for 11.2
DBD::Oracle : Oracle Driver for DBI ; P/PY/PYTHIAN/DBD-Oracle-1.64.tar.gz : /usr/local/lib64/perl5/DBD/Oracle.pm : Installed: 1.64 
/home/oracle/app/oracle/product/11.2.0/client_1/lib/libclntsh.so.11.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 
-rwxr-xr-x. 1 oracle oracle 48725761 Jun 10 17:41 /home/oracle/app/oracle/product/11.2.0/client_1/lib/libclntsh.so.11.1

Startup.pl

use lib qw(/home/oracle/app/oracle/product/11.2.0/client_1/lib);
BEGIN {
    $ENV{ORACLE_HOME}     = '/home/oracle/app/oracle/product/11.2.0/client_1';
    $ENV{LD_LIBRARY_PATH} = '/home/oracle/app/oracle/product/11.2.0/client_1/lib';
    $ENV{ORACLE_SID}      = 'MARS';
}
print STDERR "\nORACLE_HOME = " . $ENV{'ORACLE_HOME'} . "\n";
print STDERR "\nLD_LIBRARY_PATH = " . $ENV{'LD_LIBRARY_PATH'} . "\n";

use mod_perl2;
use Apache::DBI ();
use DBI ();
use DBD::Oracle;

BEGIN { use Data::Dumper; print STDERR Dumper(\@INC); }
print STDERR "ModPerl2 Startup.pl\n";
foreach ( keys %ENV ) {
    print STDERR "$_\t$ENV{$_}\n";
}
1;

アパッチ設定

PerlRequire /var/www/cgi-bin/startup.pl
SetEnv ORACLE_HOME "/home/oracle/app/oracle/product/11.2.0/client_1"
SetEnv LD_LIBRARY_PATH "/home/oracle/app/oracle/product/11.2.0/client_1/lib"

エラー:

Can't load '/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 /usr/lib64/perl5/DynaLoader.pm line 200.\n at /var/www/cgi-bin/startup.pl line 17\nCompilation failed in require at /var/www/cgi-bin/startup.pl line 17.\nBEGIN failed--compilation aborted at /var/www/cgi-bin/startup.pl line 17.\nCompilation failed in require at (eval 2) line 1.\n

Startup.pl は、コマンド ラインから実行すると機能しますが、Apache 経由での読み込みに失敗します

すでに試したこと

  • Apache conf で環境変数を設定する (上記参照)
  • Oracle ライブラリのファイル権限を確認しています
  • コマンド ラインから環境変数を出力し、Apache から実行した場合の出力と比較する (DBD::Oracle を削除した後)
  • Perl、Apache、Oracle、DBD:Oracle がすべて 64 ビット用であることを確認する
  • /home/oracle/app/oracle/product/11.2.0/client_1/lib を /etc/ld.so.conf に追加し、ldconf を実行する
4

4 に答える 4

0

それはselinuxの問題である可能性があります。スクリプトがシェルからは正常に実行され、Apache からは実行されない場合は、selinux を無効にしてみてください。

それが役立つ場合は、単に無効にするのではなく、selinux を構成することをお勧めします。

于 2014-06-10T14:20:39.510 に答える
0

RHEL (5、6、および 7) で同じエラー メッセージが表示されました。これは最終的に私のためにそれを修正したものです:

echo $ORACLE_HOME/lib >> /etc/ld.so.conf
/sbin/ldconfig
service httpd stop; service httpd start
于 2015-04-22T09:31:01.373 に答える
0

DBD::Oracleエラー メッセージで示されているように、11.1 に対してビルドされており、特定の名前/バージョンの .so ファイル ("libclntsh.so.11.1") を探しています。

ただし、パスからわかるように、ランタイムは 11.2 用に構成されており、具体的に名前が付けられた/バージョン管理された .so ファイルは提供されません。

DBD::Oracle好みのランタイム構成に合わせて再構築し、そこから進みます。

于 2013-11-13T15:11:11.890 に答える