2011-06-08 15 views
0

私はperlファイルからDBへの接続に問題があるかどうか判断するために助けが必要です。PerlスクリプトはエラーとコードでLinuxシェルからOracleに接続できません

コードはWebから(ブラウザから/file.plへ)実行されたときに正常に実行され、実行されます。シェルコンテキスト(パテ)で

、私はスクリプト "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->接続作業の変数を知っています。それは問題ではありません。私はそのパーミッションを信じていますが、それを修正する方法はわかりません。

いくつかの追加情報: ORA_HOME: 'は/ opt /オラクル/ 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 
+0

、そのユーザーのENVの設定をダンプしてみます。あなたはまだそれらの解決策を調べていますか? –

+0

あなたはこれを理解できましたか? – mrk

+0

はい。ここでの問題はインストール/セットアップが不十分であったことです。私のユーザ名は、unixコマンドラインからsqlを接続して実行することができませんでした。それが解決されれば、他の問題も解決されました。 – brbdc

答えて

0

私は、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は、NLSファイルのパスにORA_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}; 

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

あなたはOCIEnvNlsCreate` `のためのGoogle検索を行う場合は、ヒット曲の多くを得るでしょう

env|grep NLS 
+0

シェル内の 'env | grep NLS'はNLS_LANG = AMERICAN – brbdc

+0

@brbdcです。私はOracleの専門家ではないため、AMERICANがNLS_LANGの有効な設定であるかどうかを独占的に伝えることはできません。ここにNLS_LANG http://orafaq.com/wiki/NLS_LANG http://www.dba-oracle.com/t_nls_lang.htmを読むためのいくつかのURLがあります。それ以外の場合は、google "oracle set nls_lang" – mrk

+0

他の4つのユーザー名で確認しましたUnixでは。それは彼らの3人のために働いた。私たちはすべて同じNLS_LANG変数を持っていました。私たちが気づいていないunixの許可が必要です。私たちがそれを見つけ出すと私は投稿します。 – brbdc

関連する問題