• 締切済み

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

  • Perl
  • 回答数4
  • ありがとう数2

みんなの回答

  • 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/17765)
回答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

  • PerlからOracleに接続

    ご存知の方おられましたら、ご教示お願い致します。 昨日より、Perlのプログラムを始め、Oracleに接続するものを作成しておりまが以下のエラーがでてきて困っております。 接続部分ソース--------------------------- #!C:\パス use DBI; $dbh = DBI->connect("dbd:Oracle:データベース名", "ユーザ","パスワード"); エラー----------------------------------- install_driver(Oracle) failed: Can't locate loadable object for module DBD::Orac le in @INC (@INC contains: C:/Program Files/Perl/lib C:/Program Files/Perl/site/ lib .) at (eval 1) line 3 Compilation failed in require at (eval 1) line 3. Perhaps a module that DBD::Oracle requires hasn't been fully installed at database.pl line 5 環境--------------- OS WindowsXP pro perl ActivePerl-5.8.6.811 DBI,DBDはPPMでインストールしました。 接続先 OS Windows2003 DB oracle9 後、 use DBI; @ary = DBI->available_drivers; foreach (@ary){ print $_,"\n"; } でDBI使用できるDBDドライバを出した結果、Oracleが表示されておりました。 どうか、ご存知の方お願い致します。

  • Oracleデータベースに接続

    いつもお世話になります。 DBD-Oracleモジュールを使用して接続を試みているのですが、以下のエラーになります。 「プロシージャエントリポイントPL_memory_wrapがperl58.dllからみつかりません」 とダイアログが表示され、 install_driver(Oracle) failed: Can't load 'C:/Perl/site/lib/auto/DBD/Oracle/Oracle.dll' for module DBD::Oracle: load_file:指定されたプロシージャが見つかりません。 at C:/Perl/lib/DynaLoader.pm line 230. at (eval 1) line 3 Compilation failed in require at (eval 1) line 3. Perhaps a required shared library or dll isn't installed where expected at test.pl line 16 とメッセージがでます。 スクリプトは以下です。 $hDB = DBI->connect("dbi:Oracle:host=$host;sid=$sid", $user, $passwd); $hSt = $hDB->prepare("SELECT * FROM emp"); $nRes = $hSt->execute; while(@aRes = $hSt->fetchrow) { print join("\t", @aRes), "\n"; } $hSt->finish; $hDB->disconnect; 環境: Windows2000Server ActivePerl 5.8.6 Oracle8i どなたかわかる方おりましたら、ご教示下さい。。宜しくお願い致します。

    • ベストアンサー
    • Perl
  • PerlからDBの接続

    やまとです。こんにちは。 PerlからDBに接続しているのですが、うまく出来ません。 環境は OS : Windows2000、Perl : ActivePerl628、DB : Sybase11.0.3 DBI : DBI1.18、DBD : DBD_Sybase です。 DBDとDBIインストール後、DBに接続するとエラーが起こります。 エラーが起こる場所は(ソース抜粋記載) use DBI; (←ここは平気) $dbh=DBI->connect($database, $db_user, $db_password) or return 0;      (↑ここがエラー) 以上の箇所です。 もちろん、$database, $db_user, $db_passwordそれぞれの変数には 正しい値が入っています。 次にerror.logの内容ですが、 1つ目は、 Premature end of script headers: C:\・・・・・・・(←実行ファイル名) 2つ目は、 install_driver(Sybase) failed: DBD::Sybase initialize: cs_ctx_alloc() failed at C:/Perl/lib/DynaLoader.pm line 225. 3つ目は at ./test.cgi line 43 (←connectの場所) となっております。 色々調べてみましたが、分かりませんでした。 use DBI; は正常に動作していますので、DBDとDBIのインストールは正常に 出来ていると思うのですが・・・ 同じ経験、又は、このエラーに関して分かる方いらっしゃいましたら、 対処法、ご教授願いたいのですが。 宜しくお願いします。 #環境の情報など不足している部分がありましたら補足させて頂きます。

    • ベストアンサー
    • Perl
  • perlのdbi-connect処理のエラー

    active perlでdbi-connect処理から戻ってきません。教えてください。 以下のテスト的なプログラムで試しました。 Xには、数字が入ります。(会社のファイルサーバーになります) DBI->connectから戻ってきていないようです。(hhhhhhhhが表示されません) ちなみにDBI->connectをコメントにすれば表示されます。 申し訳ありませんが、どなたかご存知の方いらっしゃらないでしょうか? エラーがかえってこないと、何が悪いかわかりません。 困っています、宜しくお願いします。 ちなみにPerlは、Ver. 5.8.7.813でdbi,dbd-oracleは、昨日ppmでダウンロードしました。 # DBへコネクトする my $datasource = 'dbi:oracle:usrDB:xxx.xxx.x.xx:8080' ; my $usr = 'usrname' ; my $pass = 'usepass' ; my $dbh = DBI->connect($datasource,$usr,$pass) ; print "hhhhhhhhhhhh\n" ; if( ! $dbh ){ print "gggggggggggg\n" ; } $dbh->disconnect();

    • ベストアンサー
    • Perl
  • perl >> DBI >> DBD >> oracle8でエラー

    perlからDBI経由でoracleに接続したいのですが、 なぜか DBI->connectのところで失敗して下記のようなエラーが出ます。 `CONNECT ERROR ORA-1034: ORACLE not available oas userでtelnetで入り、直接perl scriptを起動すると問題なく動作するの ですが、なぜかOAS経由でブラウザーからCGIとしてcallすると 失敗するのです。 もう2日も悩んでます。 どなたか原因がわかりましたらご教授ください。 ---- 環境 --- perl 5.005_03 OAS 4.0.8.1 DBI 1.30 DBD-Oracle 1.12 OS solaris2.6 接続先DBは別のsolarisマシンに入ってる。 ----------------ソース----------------------------- #!/usr/local/bin/perl use DBI; $dsn = 'DBI:Oracle:orcl'; $user = 'testuser'; $password = 'testuserpass'; $dbh = DBI->connect($dsn, $user, $password) or die "接続できません"; my $sth = $dbh->prepare("select * from munec"); $sth->execute; while(@row = $sth->fetchrow_array) { print "@row\n"; } ---------------

  • データベースにアクセス出来ません。宜しくお願いします。

    こんにちわ。先日postgre8.2をwinXPにダウンロードしました。デpostgresの画面ではデータベースの新規作成が出来るようになっているのですが、パールから作ろうとするとコマンドプロンプトにエラーが出てきます。以下にパールの文とエラーを書きますので、何かチェックする点や設定など確認や文自体の間違いなどお教え下さい。宜しくお願いします。 #!c:/perl/bin/perl use DBD::Pg; use DBI; $dbh=DBI->connect("dbi:Pg:host=localhost;dbname=postgres",'ddd','cc'); $sth=$dbh->prepare($a); my$a=(<<"EOL"); CREATE DATABASE kensaku with encoding='euc_jp' owner=ddd template=postgres tablespace=pg_default; grant all on database kensaku to public; EOL $v=$sth->execute(); $d=$dbh->disconnect; エラー:DBD::Pg::st execute warning: at test.pl line 21. 宜しくお願いします。

    • ベストアンサー
    • Perl
  • 外部ファイルのインクルードについて

    外部ファイルにデータベースアクセスの為のユーザ情報を書いておき、DB接続が発生するファイルにのみ、インクルードさせたいと考えております。下記のようなプログラムを記述したのですが、エラーが出てしまいました。自分でネットで調べたのですが、間違っていないように感じます。何か、間違っていますでしょうか? my $dbh = DBI->connect部(グローバル変数が読み込めない)でエラーが発生しております。 #!/usr/local/bin/perl use DBI; require 'db.conf'; $ENV{ORACLE_HOME}='/opt/app/oracle/product/9'; my $dbh = DBI->connect($datasrc, $username, $password) || die DBI::errstr; my $sql = "SELECT * FROM NAME"; my $sth = $dbh->prepare($sql) || die $dbh->errstr; $sth->execute || die $dbh->errstr; ~ 省略 ~ ---------db.confの中身(パーミッション755)--------- my $datasrc = "oracle9"; my $username = "test"; my $password = "password"; 1; #return true ----------エラーログ------------------ Global symbol "$datasrc" requires explicit package name at /web/hthome/cgi/test.cgi line 7. Global symbol "$username" requires explicit package name at /web/hthome/cgi/test.cgi line 7. Global symbol "$password" requires explicit package name at /web/hthome/cgi/test.cgi line 7. 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • データベースが返すエラー文字列について

    OSのバージョンUPに伴いoracle、perl、DBI等のバージョンもあげました perl 5.8.7 DBI-1.52 oracle9i perl 5.005_03 DBI-1.13 oracle8.0.5 その関係かはよくわからないのですが、エラー処理の実行結果が異なってしましました $sth = $dbh->prepare("$sql") or die "Cannot prepare: " . $dbh->errstr(); $sth->execute() or die print "データベースエラー"; このSQL文の実行結果はエラーの際、「データベースエラー」というdieメッセージとなります しかしバージョンをあげた方では、メッセージが表示されません $sthを出力してみたところ、空でした エラーでない場合の実行結果は同じになります 原因がわからず困っています 同じようにエラー処理(エラーメッセージを表示させたい)のですが、どのようにしたらよいでしょうか? どなたかご教授ください 宜しく御願いします

    • ベストアンサー
    • Perl
  • すでに接続してあるデータベースについて

    mysqlデータベースにperlで接続する際は、 use DBI; $dsn="DBI:mysql:database=test:host=localhost"; $dbh = DBI->connect($dsn,user,passwd); とし、データベースに接続して、 $sth = DBI->prepare("SELECT * From `table`); ・・・・・・ と続いていくと思いますが、 すでにデータベースに接続(コネクション)していた場合、どのように書けばいいのでしょうか? どなたかよろしくお願いします。

    • ベストアンサー
    • Perl
  • DBI:Spriteについて

    ●Perl DBI:Spriteが使いたくて DBD-Spriteをインストールしました。 DBD-Sprite-0.50 WindowsXP上で、VC++6.0 Perl5.6 DBIはインストールしています。 $dbh = DBI->connect("DBI:Sprite:testdb.txt",'','') 初歩的なことですが、以下の行でエラーが発生します。 Invalid username/password! at C:/usr/site/lib/DBD/Sprite.pm line 199. DBI connect('testdb.txt','',...) failed: at test.pl line 39 dbih_getcom given an undefined handle (perhaps returned from a previous call which failed) at test.pl line 39. "DBI:Sprite:testdb.txt"のtestdb.txtは testdb.txtというファイル名です。 ユーザーは ''と パスワードは ''です。 何かよい情報はありますか?

    • ベストアンサー
    • Perl