Почему DBI Perl жалуется на «fail: ERROR OCIEnvNlsCreate», когда я пытаюсь подключиться к Oracle 11g? - PullRequest
5 голосов
/ 26 мая 2010

Я получаю следующую ошибку при подключении к базе данных Oracle 11g с помощью простого сценария Perl:

 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 ]

6 голосов
/ 26 мая 2010

Проверьте свою конфигурацию клиента Oracle (включая, как говорится в сообщении, ORACLE_HOME), проверьте права доступа к файлам и т. Д. Маловероятно, что DBI сам по себе имеет какое-либо отношение к проблеме, и я точно знаю, что DBD :: Oracle совместим с библиотеками 11g (по крайней мере, с 11g InstantClient).

3 голосов
/ 21 октября 2011
  • Установить модуль Perl DBD :: Oracle
  • Добавьте use DBD::Oracle; в ваш скрипт на Perl.

Это заставило меня исчезнуть.

2 голосов
/ 27 октября 2015

Извините за оживление этой темы, но я пытался решить эту проблему в течение нескольких недель. Нигде я не нашел то, что наконец решило это для меня.

Среда: RedHat 6.5, Oracle Instant Client 12.1, Apache 2.2

Что для меня решено: Измените разрешения для каталога, в котором установлен Oracle Instant Client. Это также должно быть значение LD_LIBRARY_PATH. Каталог не был доступен для «других», только для владельца и группы. Эта команда имела большое значение:

# chmod o+rx INSTANTCLIENT-DIRECTORY

Я пытался создать все возможные комбинации ORACLE_HOME и LD_LIBRARY_PATH. (Даже «сбросив» ORACLE_HOME; я нашел предложения, которые могли бы решить проблему, поскольку Instant Client требовал только LD_LIBRARY_PATH и! NOT! ORACLE_HOME.) меня поразило посмотреть дальше в сообщении об ошибке:

    failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var
    or PATH (Windows) and or NLS settings, permissions, etc.

права доступа является ключевым словом!

Надеюсь, это поможет кому-то еще!

2 голосов
/ 26 ноября 2012

После обновления Oracle с 10.2.0.4 до 10.2.0.5 мой Perl-CGI не работает, файл error.log в Apache был ошибкой:

Ошибка подключения DBI ('DB', 'user', ...): ERROR OCIEnvNlsCreate. Проверьте ORACLE_HOME (Linux) env var или PATH (Windows) и / или NLS, разрешения и т. д. на ... OCIEnvNlsCreate. Проверьте ORACLE_HOME (Linux) env var или PATH (Windows) и или настройки NLS, разрешения и т. д.! на ...

добавление следующей директивы решит проблему:

my $ORACLE_HOME = "/usw/app/oracle/product/10.2";
$ENV{ORACLE_HOME}=$ORACLE_HOME;
0 голосов
/ 22 января 2018

Я тоже прошел через ту же проблему. В моем случае переменная среды ORACLE_HOME была неверной.

0 голосов
/ 31 декабря 2015

Переменная среды, используемая для указания библиотек Oracle, может отличаться в разных системах. В большинстве систем используйте LD_LIBRARY_PATH, но это также может быть LIBPATH (особенно в AIX), DYLD_LIBRARY_PATH или, возможно, другие.

0 голосов
/ 22 августа 2014

Предыдущие ответы не решают эту проблему, но они направили меня в правильном направлении: в запущенной среде отсутствовал DYLD_LIBRARY_PATH для Oracle InstantClient. Вы можете проверить по телефону: launchctl export

или

launchctl getenv variable_name в OS X 10.10

Я сравнил вывод из моего .bash_profile и обнаружил, что путь к instanclient отсутствует в launchctl PATH и DYLD_LIBRARY_PATH - Как только я добавил их со следующим, он работал:

launchctl setenv PATH /path/to/instantclient
launchctl setenv DYLD_LIBRARY_PATH /path/to/instantclient
0 голосов
/ 28 октября 2013

Убедитесь, что #!/usr/bin/perl (первая строка вашего скрипта) является верной версией Perl, которую вы тоже хотите использовать!

...