dポイントプレゼントキャンペーン実施中!

OS : WindowsXP SP2
Perl : ActivePerl 5.8.8
DBD : DBD-Oracle1.17
DB : Oracle9i

PerlでOracleのDBサーバに接続ができません。

ソースは以下の通りです。
================================================================================
#!perl -w

use DBI;

$dbh = DBI->connect('dbi:Oracle:test', 'scott/tiger') or die "An error occured : $@";
$dbh->disconnect;

exit 0;
================================================================================

上記コードを実行すると、connectの行でdieします。
================================================================================
D:\test>perl ttoracle.pl
DBI connect('test','scott/tiger',...) failed: ORA-12705: Cannot access NLS data files or invalid environment specified (DBD ERROR: OCISessionBegin) at ttoracle.pl line 5
An error occured : at ttoracle.pl line 5.
================================================================================

Oracleのサーバーはローカルにあり、ポートもデフォルトの設定です。
試しに、
$dbh = DBI->connect('dbi:Oracle:test@localhost:1521', 'scott/tiger') or die "An error occured : $@";
としましたが、結果は同じでした。
また、エラーの内容的に環境変数かと思いORACLE_HOMEを環境変数にセットしてみましたが、これもまた、結果は同じでした。

DBの接続については、sqlplusコマンドからであれば問題なく接続できます。
(コマンド:sqlplus scott/tiger@test)

やはり、環境変数まわりの設定が問題でしょうか?
よろしくお願いします。

A 回答 (4件)

全然回答ではないですが、補足だけ。



windowsだと、NLS_LANG等はレジストリに入ったハズなので、
特に自前でORACLE関連の環境変数をsetしていないのであれば、
私の書いた事については問題ないと思います。
    • good
    • 0
この回答へのお礼

会社の環境でNLS_LANGを環境変数に設定したところ、
PerlからOracleに接続することができました。
(今まで環境変数のNLS_LANGは未設定でした。)

ただ、ひとつ疑問なのが、なぜ自宅ではNLS_LANGの
設定が必要なく、会社では必要なのかということです。
しかも、sqlplusやJDBC経由で接続した場合は一切問題がなく、
Perlの実行時のみ、上記の問題が発生するのです・・・。

とりあえず、当初の問題はおかげさまで解決できました。
ご協力ありがとうございました。

お礼日時:2007/01/29 20:53

エラーメッセージを正直にうけとれば、


NLS_LANGの設定値が間違っているという事ですが、
だとするとsqlplusも動かないんですよね・・・。

perlを動かす時だけ、
環境変数で間違ったNLS_LANGが設定されていたりしませんか?

この回答への補足

perl及びsqlplus実行時はコマンドプロンプトから直接コマンドを叩いており、環境変数は同じはずなのです。。。

ただ、コマンドプロンプトでsetコマンドを叩いてもNLS_LANGの値は設定されてないようです。このNLS_LANGの設定は必須なんでしょうか?
今までOracleを使っていて、この環境変数を設定したことがないのですが・・・。(設定しなくてもデフォルト値が指定される??)

別回答に補足しましたとおり、会社と自宅で同様の環境のはずが、動作が違うため、その違いを探ってみようと思っています。

補足日時:2007/01/28 02:13
    • good
    • 0

こんにちは



下記のように変更してみてはどうでしょう
DBI->connect('dbi:Oracle:test','scott','tiger');

この回答への補足

返事が遅れてしまい、申し訳ございません。
ご提案いただいた方法で試してみましたが、結果は同様でした。

補足日時:2007/01/28 02:08
    • good
    • 0

解決するかどうかわかりませんが…



use DBI;
use DBD::Oracle;

$dbh = DBI->connect("dbi:Oracle:$SID","$UserName/$Paswd") || die "Unable to connect:$DBI::errstr";

この回答への補足

返事が遅れてしまい、申し訳ございません。
ご提案いただいた方法で試してみましたが、結果は同様でした。

ちなみに、会社の環境で試すと上記エラーが発生し、会社と同様のインストール方法(環境変数等も同じはず・・・)で自宅にOracleを導入し、実行してみたところ問題なく接続できました。

どうも、perlよりも、DB側に問題があるように思えるのですが、なにを確認してよいのか分かりません。。。

補足日時:2007/01/28 02:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!