- 締切済み
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) やはり、環境変数まわりの設定が問題でしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- thatsthat
- ベストアンサー率55% (15/27)
全然回答ではないですが、補足だけ。 windowsだと、NLS_LANG等はレジストリに入ったハズなので、 特に自前でORACLE関連の環境変数をsetしていないのであれば、 私の書いた事については問題ないと思います。
- thatsthat
- ベストアンサー率55% (15/27)
エラーメッセージを正直にうけとれば、 NLS_LANGの設定値が間違っているという事ですが、 だとするとsqlplusも動かないんですよね・・・。 perlを動かす時だけ、 環境変数で間違ったNLS_LANGが設定されていたりしませんか?
補足
perl及びsqlplus実行時はコマンドプロンプトから直接コマンドを叩いており、環境変数は同じはずなのです。。。 ただ、コマンドプロンプトでsetコマンドを叩いてもNLS_LANGの値は設定されてないようです。このNLS_LANGの設定は必須なんでしょうか? 今までOracleを使っていて、この環境変数を設定したことがないのですが・・・。(設定しなくてもデフォルト値が指定される??) 別回答に補足しましたとおり、会社と自宅で同様の環境のはずが、動作が違うため、その違いを探ってみようと思っています。
- moon_piyo
- ベストアンサー率60% (88/146)
こんにちは 下記のように変更してみてはどうでしょう DBI->connect('dbi:Oracle:test','scott','tiger');
補足
返事が遅れてしまい、申し訳ございません。 ご提案いただいた方法で試してみましたが、結果は同様でした。
- bardfish
- ベストアンサー率28% (5029/17766)
解決するかどうかわかりませんが… use DBI; use DBD::Oracle; $dbh = DBI->connect("dbi:Oracle:$SID","$UserName/$Paswd") || die "Unable to connect:$DBI::errstr";
補足
返事が遅れてしまい、申し訳ございません。 ご提案いただいた方法で試してみましたが、結果は同様でした。 ちなみに、会社の環境で試すと上記エラーが発生し、会社と同様のインストール方法(環境変数等も同じはず・・・)で自宅にOracleを導入し、実行してみたところ問題なく接続できました。 どうも、perlよりも、DB側に問題があるように思えるのですが、なにを確認してよいのか分かりません。。。
お礼
会社の環境でNLS_LANGを環境変数に設定したところ、 PerlからOracleに接続することができました。 (今まで環境変数のNLS_LANGは未設定でした。) ただ、ひとつ疑問なのが、なぜ自宅ではNLS_LANGの 設定が必要なく、会社では必要なのかということです。 しかも、sqlplusやJDBC経由で接続した場合は一切問題がなく、 Perlの実行時のみ、上記の問題が発生するのです・・・。 とりあえず、当初の問題はおかげさまで解決できました。 ご協力ありがとうございました。