• 締切済み

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"; } ---------------

みんなの回答

  • 2nd
  • ベストアンサー率30% (19/63)
回答No.2

OAS が oas ユーザで起動してようが、root ユーザで起動してようが 通常 CGI を起動するユーザは、nobody ユーザ辺りになっていると思います。 なので、CGI で環境変数に依存する処理を走らせる場合は、 CGI のなかで設定してやります。 この場合、perl ですので $ENV{'ORACLE_SID'} = "ora8"; $ENV{'ORACLE_BASE'} = "/XXX/XXX/oracle"; などとして他の環境変数も設定してやる必要があります。 と、このあたりが原因ではないかと。

  • gaball
  • ベストアンサー率61% (27/44)
回答No.1

自信はありませんが、少しでもヒントになれば。 user oraでは当然oracle関係の環境変数が定義されていると思います。 webサーバの実行ユーザは別ユーザではありませんか。 その時に必要な環境変数が定義されているか。 また、webサーバを実行しているユーザでログインしてスクリプトが 直接実行できるか試してみてはいかがでしょうか。

kumo_zaru
質問者

補足

gaballさん回答有難うございます。 僕の説明不足だったのですが、OASはuser oasで動作しているので ログインして直接実行しているuserと同じ物です。又、環境変数は僕も怪しいと思ったので、環境変数を表示するperl script をブラウザーから呼び出し、コンソールからの物(もちろん同じuser oasでログイン)と比較したのですが、ブラウザー経由にしか設定されていない環境変数名、値はあったのですが、直接実行のほうにしかない環境変数名、値はありませんでした。で、途方にくれてしまっています。 DBIを使わないscriptは問題なく動作するので、やはりDBIに必要不可欠な環境変数、ORACLE_HOMEとかが一番あやしいのですが、ちゃんとセットされてるしなあ、ああ困った。

関連するQ&A

専門家に質問してみよう