Скрипт Perl не может подключиться к Oracle из оболочки Linux с ошибкой и кодом - PullRequest
0 голосов
/ 08 июня 2011

Мне нужна помощь в определении проблемы с моим подключением из файла perl к БД.

Код работает и прекрасно работает при запуске из Интернета (браузер по адресу /file.pl url).

В контексте оболочки (putty), когда я запускаю скрипт "perl /file.pl", я получаю эту ошибку:

[date] file.pl: DBI connect('address','username', 'password') failed: 
ERROR OCIEnvNlsCreate (check OR ACLE_HOME and NLS settings etc.) at file.pl line 61

Строка 61 гласит:

$dbh = DBI->connect(A, B, C );

Подробнее: Когда файл запускается другим пользователем (предположительно с большими разрешениями), он работает для него (в оболочке).

#!/usr/bin/perl -w

require 'include.pl';
require 'bencfg.pl';
use lib '/www/modules/'; #rqd
use DBI;
use DBD::Oracle;

print "Content-type: text/html; charset=UTF-8\n\n";
print "Test Run of connection...\n\n<br>";
print "ORA_HOME: '$ENV{ORACLE_HOME}'\n<br>";  #ORA_HOME: '/opt/oracle/10g/'

#connect to DB
$dbh = DBI->connect(A, B C) || die "Database connection not made: $DBI::errstr";
if($dbh){
   print "OK\n<br>";
   $dbh->disconnect;
}
else{
   print "failed: $DBI::errstr\n";
 }

Я знаю переменные DBI-> connect work. Это не проблема. Я верю в его разрешения, но не могу сказать, как это исправить.

Некоторая дополнительная информация: ORA_HOME: '/ opt / oracle / 10g'

NLS_SESSION_PARAMETERS

    PARAMETER   VALUE
    NLS_LANGUAGE    AMERICAN
    NLS_TERRITORY   AMERICA
    NLS_CURRENCY    $
    NLS_ISO_CURRENCY    AMERICA
    NLS_NUMERIC_CHARACTERS  .,
    NLS_CALENDAR    GREGORIAN
    NLS_DATE_FORMAT MM/DD/YYYY HH24:MI:SS
    NLS_DATE_LANGUAGE   AMERICAN
    NLS_SORT    BINARY
    NLS_TIME_FORMAT HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT    DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT  HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY   $
NLS_COMP    BINARY
NLS_LENGTH_SEMANTICS    BYTE
NLS_NCHAR_CONV_EXCP FALSE

1 Ответ

0 голосов
/ 08 июня 2011

Каждый раз, когда у меня возникала эта проблема с подключением к 10g, я должен был убедиться, что NLS_LANG env var был установлен:

## for utf8 data
$ENV{NLS_LANG} = 'american_america.al32utf8';
## for ios-8859-1 data
$ENV{NLS_LANG} = 'american_america.we8iso8859p1';  

Plus, установите ORA_NLS в качестве пути к файлам nls

$ENV{ORA_NLS} = -d "$ENV{ORACLE_HOME}/ocommon/nls/admin/data" ? "$ENV{ORACLE_HOME}/ocommon/nls/admin/data" : 
   -d "$ENV{ORACLE_HOME}/nls/admin/data" ? "$ENV{ORACLE_HOME}/nls/admin/data" : 
   -d "$ENV{ORACLE_HOME}/nls/data" ? "$ENV{ORACLE_HOME}/nls/data"

$ENV{ ORA_NLS32 }     = $ENV{ORACLE_NLS};

Re: More details: ... When another user ... runs the file, it works for him

Попробуйте сбросить настройки env этого пользователя,

env|grep NLS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...