アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

OAS が oas ユーザで起動してようが、root ユーザで起動してようが


通常 CGI を起動するユーザは、nobody ユーザ辺りになっていると思います。
なので、CGI で環境変数に依存する処理を走らせる場合は、
CGI のなかで設定してやります。

この場合、perl ですので
$ENV{'ORACLE_SID'} = "ora8";
$ENV{'ORACLE_BASE'} = "/XXX/XXX/oracle";
などとして他の環境変数も設定してやる必要があります。

と、このあたりが原因ではないかと。
    • good
    • 0

自信はありませんが、少しでもヒントになれば。



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

この回答への補足

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

補足日時:2002/10/16 08:49
    • good
    • 0

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