• 締切済み

Oracleのデータベースに接続できない。

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) やはり、環境変数まわりの設定が問題でしょうか? よろしくお願いします。

みんなの回答

  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.4

全然回答ではないですが、補足だけ。 windowsだと、NLS_LANG等はレジストリに入ったハズなので、 特に自前でORACLE関連の環境変数をsetしていないのであれば、 私の書いた事については問題ないと思います。

btom0106
質問者

お礼

会社の環境でNLS_LANGを環境変数に設定したところ、 PerlからOracleに接続することができました。 (今まで環境変数のNLS_LANGは未設定でした。) ただ、ひとつ疑問なのが、なぜ自宅ではNLS_LANGの 設定が必要なく、会社では必要なのかということです。 しかも、sqlplusやJDBC経由で接続した場合は一切問題がなく、 Perlの実行時のみ、上記の問題が発生するのです・・・。 とりあえず、当初の問題はおかげさまで解決できました。 ご協力ありがとうございました。

  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.3

エラーメッセージを正直にうけとれば、 NLS_LANGの設定値が間違っているという事ですが、 だとするとsqlplusも動かないんですよね・・・。 perlを動かす時だけ、 環境変数で間違ったNLS_LANGが設定されていたりしませんか?

btom0106
質問者

補足

perl及びsqlplus実行時はコマンドプロンプトから直接コマンドを叩いており、環境変数は同じはずなのです。。。 ただ、コマンドプロンプトでsetコマンドを叩いてもNLS_LANGの値は設定されてないようです。このNLS_LANGの設定は必須なんでしょうか? 今までOracleを使っていて、この環境変数を設定したことがないのですが・・・。(設定しなくてもデフォルト値が指定される??) 別回答に補足しましたとおり、会社と自宅で同様の環境のはずが、動作が違うため、その違いを探ってみようと思っています。

  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.2

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

btom0106
質問者

補足

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

  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.1

解決するかどうかわかりませんが… use DBI; use DBD::Oracle; $dbh = DBI->connect("dbi:Oracle:$SID","$UserName/$Paswd") || die "Unable to connect:$DBI::errstr";

btom0106
質問者

補足

返事が遅れてしまい、申し訳ございません。 ご提案いただいた方法で試してみましたが、結果は同様でした。 ちなみに、会社の環境で試すと上記エラーが発生し、会社と同様のインストール方法(環境変数等も同じはず・・・)で自宅にOracleを導入し、実行してみたところ問題なく接続できました。 どうも、perlよりも、DB側に問題があるように思えるのですが、なにを確認してよいのか分かりません。。。

関連するQ&A