我使用简单的Perl脚本连接到Oracle 11g数据库时出现以下错误:
failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var or PATH (Windows) and or NLS settings, permissions, etc. at
脚本如下:
#!/usr/local/bin/perl
use strict;
use DBI;
if ($#ARGV < 3) {
print "Usage: perl testDbAccess.pl dataBaseUser dataBasePassword SID dataBasePort\n";
exit 0;
}
my ($user, $pwd, $sid, $port) = @ARGV;
my $host = `hostname`;
my $dbh;
my $sth;
my $dbname = "dbi:Oracle:HOST=$host;SID=$sid;PORT=$port";
openDbConnection();
closeDbConnection();
sub openDbConnection() {
$dbh = DBI->connect ($dbname, $user ,$pwd , { RaiseError => 1}) || die "Database connection not made: $DBI::errstr";
}
sub closeDbConnection() {
#$sth->finish();
$dbh->disconnect();
}
以前有人见过这个问题吗?
8 回答
检查Oracle客户端配置(包括,如消息所示,ORACLE_HOME),检查文件权限等.DBI本身不太可能与问题有关,我知道DBD :: Oracle与之兼容的事实11g库(至少11g InstantClient) .
安装perl模块DBD::Oracle
将
use DBD::Oracle;
添加到perl脚本中 .这让我的问题消失了 .
为了将Oracle表单10.2.0.4升级到10.2.0.5,我的Perl-CGI无法正常工作,Apache的error.log文件出错了:
添加以下指令解决问题:
很抱歉让这个帖子再次活跃起来,但我一直试图解决这个问题好几个星期 . 我找不到最终为我解决的问题 .
环境:RedHat 6.5,Oracle Instant Client 12.1,Apache 2.2
What solved it for me: 更改安装Oracle Instant Client的目录的权限,该权限也必须是LD_LIBRARY_PATH的值 . "other"无法访问该目录,只是所有者和组 . 这个命令完全不同:
我一直在尝试创建ORACLE_HOME和LD_LIBRARY_PATH的所有可能组合 . (甚至“取消设置”ORACLE_HOME;我找到了可以解决问题的建议,因为Instant Client只需要LD_LIBRARY_PATH和!NOT!ORACLE_HOME . )没有任何帮助,直到...它让我在错误消息中进一步查看:
permissions 是关键词!
希望这有助于其他人!
检查
#!/usr/bin/perl
(脚本的第一行)是您想要使用的正确的perl版本!以前的答案并没有解决这个问题,但他们确实指出了我正确的方向:启动的环境缺少
DYLD_LIBRARY_PATH
for Oracle instantclient . 您可以致电查询:launchctl export
要么
OS X 10.10中的
launchctl getenv variable_name
我比较了.bash_profile的输出,发现instanclient的路径不在
launchctl PATH
和DYLD_LIBRARY_PATH
中 - 一旦我添加了以下它就可以了:用于指定Oracle库的环境变量可能因系统而异 . 在大多数系统上,使用LD_LIBRARY_PATH但它也可能是LIBPATH(特别是在AIX上),DYLD_LIBRARY_PATH或其他系统 .
我也经历了同样的问题 . 在我的情况下,ORACLE_HOME环境变量不正确 .