我正在尝试使用perl-DBD-Oracle连接到Oracle数据库。我需要设置以下环境变量:
export LD_LIBRARY_PATH=/home/x/lib/ora10gclient
export TNS_ADMIN=/home/x/lib/ora10gclient
export PATH=/home/x/lib/ora10gclient:/usr/kerberos/bin:/home/x/bin:/home/x/bin64:/usr/local/sbin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin
export ORACLE_HOME=/home/x/lib/ora10gclient
此脚本由无头用户运行,我已将这些行放在.bash_profile文件中,供无头用户使用。
问题是,无头用户ssh进入运行此脚本的机器并且未获取bash配置文件。所以我想我只是在脚本的BEGIN块中设置这些环境变量,如下所示:
BEGIN {
$ENV{'LD_LIBRARY_PATH'} = '/home/x/lib/ora10gclient';
$ENV{'TNS_ADMIN'} = '/home/x/lib/ora10gclient';
$ENV{'PATH'} = '/home/x/lib/ora10gclient:/usr/kerberos/bin:/home/x/bin:/home/x/bin64:/usr/local/sbin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin';
$ENV{'ORACLE_HOME'} = '/home/x/lib/ora10gclient';
}
然而,脚本无法声称它找不到Oracle.pm,这是设置这些环境变量时不能做的事情。
我在整个脚本中添加了print语句,以确认它确实设置了环境变量。甚至在尝试创建DB的句柄(脚本失败的位置)之前打印出环境变量,并确认它们仍然设置为正确的值。
我也没有产生任何子进程。下面是我的脚本的简化版本,它以相同的方式失败。
#!/usr/local/bin/perl
use warnings;
use strict;
BEGIN {
$ENV{'LD_LIBRARY_PATH'} = '/home/x/lib/ora10gclient';
$ENV{'TNS_ADMIN'} = '/home/x/lib/ora10gclient';
$ENV{'PATH'} = '/home/x/lib/ora10gclient:/usr/kerberos/bin:/home/x/bin:/home/x/bin64:/usr/local/sbin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin';
$ENV{'ORACLE_HOME'} = '/home/x/lib/ora10gclient';
}
use DBI;
testConnect();
sub testConnect {
my $orclPort = 1521;
my $orclHost = '<oraclehost>';
my $orclUser = '<user>';
my $srvName = '<servicename>';
my $db = "DBI:Oracle:service_name=$srvName;host=$orclHost;port=$orclPort";
my $orclDBHndl = DBI->connect($db, $orclUser, $orclUser) or die "could not connect: $DBI::errstr\n";
}
关于可能出现什么问题的任何想法?
答案 0 :(得分:2)
在perl启动之前需要设置LD_LIBRARY_PATH。编写一个shell包装器,设置变量,然后启动脚本。
另请参阅this thread了解替代方案和解释的其他链接。