Hi Fredo,

I had a similar problem in similar environment.
My simple DBD program worked fine on normal shell and normal apache, but it
didn't work under the mod_perl2.
It showed error as following in apache error_log.

----[error_log]----
DBI->connect(ynt0) failed: (UNKNOWN OCI STATUS 1804) OCIInitialize. Check
ORACLE_HOME and NLS settings etc. at
/yopt/httpd-2.0.39_prefork_perl5.6.1normal/cgi-bin/test1.cgi line 42
[Mon Jul 29 20:15:37 2002] [error] 25703: ModPerl::Registry: `Cannot connect:
(UNKNOWN OCI STATUS 1804) OCIInitialize. Check ORACLE_HOME and
 NLS settings etc.at
/yopt/httpd-2.0.39_prefork_perl5.6.1normal/cgi-bin/test1.cgi line 42.
--------

This looks like a problem of %ENV.
So, I inserted debug code in DBD.pm to output %ENV, and it was correct in
DBD.pm under mod_perl2.
But I didn't check deep C code, I gave up to check it...

My machine is as following.
  - perl5.6.1(non thread)
  - DBI-1.30
  - DBD-Oracle-1.12
  - mod_perl1.99_04(DSO build)
  - apache2.0.39(prefork)
  - Oracle9.0.1.3 for Linux in same machine

And I attached my last mail.
Sorry for being long mail...

Thank you.

Atsushi


----- Original Message -----
From: "Atsushi Fujita" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, July 29, 2002 8:39 PM
Subject: mod_perl2 & DBD::Oracle problem


> Hi all,
>
> I am trying to use DBD::Oracle1.12 on mod_perl2.
> But it doesn't work fine.
> It shows error as following in error_log at $dbh = DBI->connect.
>
> ----[error_log]----
> DBI->connect(ynt0) failed: (UNKNOWN OCI STATUS 1804) OCIInitialize. Check
> ORACLE_HOME and NLS settings etc. at
> /yopt/httpd-2.0.39_prefork_perl5.6.1normal/cgi-bin/test1.cgi line 42
> [Mon Jul 29 20:15:37 2002] [error] 25703: ModPerl::Registry: `Cannot
connect:
> (UNKNOWN OCI STATUS 1804) OCIInitialize. Check ORACLE_HOME and
>  NLS settings etc.at
> /yopt/httpd-2.0.39_prefork_perl5.6.1normal/cgi-bin/test1.cgi line 42.
> --------
>
>
> ----[test1.cgi]----
> use DBI;
>
> my $dsn      = 'dbi:Oracle:';
> my $user     = 'username/password';
> my $password = '';
>
> $ENV{'ORACLE_HOME'} = '/u01/app/oracle/product/9.0.1';
> $ENV{'ORACLE_SID'}  = 'ynt0';
> $ENV{'NLS_LANG'}    = 'japanese_japan.ja16euc';
>
> print "ORACLE_HOME=$ENV{'ORACLE_HOME'}<br>\n";
> print "ORACLE_SID=$ENV{'ORACLE_SID'}<br>\n";
> print "NLS_LANG=$ENV{'NLS_LANG'}<br>\n";
> print "DSN=$dsn$ENV{'ORACLE_SID'}<br>\n";
>
> $dbh = DBI->connect("$dsn$ENV{'ORACLE_SID'}", $user, $password)
>  or die "Cannot connect: ".$DBI::errstr;
> ...
> --------
>
> At first, I suspect that the reason is %ENV in this script.
> But I set surely, and this output as following.
>
> ----[Broser output HTML]----
> ORACLE_HOME=/u01/app/oracle/product/9.0.1
> ORACLE_SID=ynt0
> NLS_LANG=japanese_japan.ja16euc
> DSN=dbi:Oracle:ynt0
>
> Internal Server Error
> The server encountered an internal error or misconfiguration and was unable
to
> complete your request.
> ....
> --------
>
> And if I turned off the mod_perl, it works fine on normal CGI-script.
> This error occurred only mod_perl.
> (I tested mod_perl1.26 & apache 1.3.26, it worked fine...)
>
> My machine is as following.
>   - perl5.6.1(non thread)
>   - DBI-1.30
>   - DBD-Oracle-1.12
>   - mod_perl1.99_04(DSO build)
>   - apache2.0.39(prefork)
>
>
> ----[httpd.conf]----(is this wrong??)
> LoadModule perl_module modules/mod_perl.so
> .......
> <IfModule mod_perl.c>
>     PerlModule ModPerl::Registry
>     <Location /cgi-bin>
>         SetHandler perl-script
>         PerlResponseHandler ModPerl::Registry
>         PerlOptions +ParseHeaders
>         Options +ExecCGI
>     </Location>
> </IfModule>
> --------
>
>
> Thanks,
>
> Atsushi.



----- Original Message -----
From: "Fredo Sartori" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, August 15, 2002 4:44 PM
Subject: apache2, DBD/Oracle problem


> Hi,
>
> I have problems connecting to an Oracle-DB through apache2. A test
> script, that works fine when run directly from the shell, fails to
> connect to the Orcacle DB, when run through apache. As far as I can see,
> the SID is not passed to the DB server.
>
> .....................................
> The foolowing message is found in the error log:
>
> [Thu Aug 15 09:25:46 2002] [error] 27824: ModPerl::Registry:
> `DBI->connect(sun1) failed: Error while trying to retrieve text for
> error ORA-12505 (DBD ERROR: OCIServerAttach) at
> /server/apache-dev/perl/test-oracle line 23
> '
>
> .......................................
> the log file  of the Oracle listener on the DB box ahows:
>
>
> 15-AUG-02 09:25:46 *
>
(CONNECT_DATA=(SID=*)(SERVICE_NAME=sun1.)(CID=(PROGRAM=)(HOST=ollenhauer)(USER
=www-adm))) * (ADDRESS=(PROTOCOL=tcp)(HOST=172.22.250.27)(PORT=53048)) sh * *
* 0
>
> ......................................
> The following versions are used:
> apache 2.0.39
> mod_perl: 1.99_04
> DBI: 1.30
> DBD-Oracle: 1.12
>
>
> .................
> #sample script:
> #!/usr/local/bin/perl -w
>
> BEGIN {
>     $ENV{ORACLE_HOME} = '/opt/oracle/app/product/8.1.6';
>     $ENV{ORACLE_SID}  = 'SPD';
> }
>
> use CGI;
>
> use DBI;
>
>
> my $db_name = 'dbi:Oracle:sun1';
> my $db_user = 'webuser';
> my $db_pass = 'topsecret';
>
> my $q=CGI->new;
>
> my $dbh = DBI->connect($db_name, $db_user, $db_pass,
>    {LongReadLen => 65534,
>     RaiseError  => 1,
>     AutoCommit  => 0});
>
> my $query = q{
> SELECT count (*)
> FROM asdb_mgr.stammdaten14
>         WHERE bis is null  };
>
> my $sth = $dbh->prepare($query);
>
> my $rc  = $sth->execute();
>
> my $count = $sth->fetchrow_array;
>
> print $q->header;
> print "Anzahl der SPD-MdBs: $count\n";
>
> $sth->finish;
>
> $dbh->disconnect;
>
> ...............................
> httpd.conf:
>
> Alias /perl  /server/apache-dev/perl
> <IfModule mod_perl.c>
>
>   PerlRequire "/server/apache-dev/conf/perl-startup.pl"
>
>     <Location /perl>
>        SetHandler       perl-script
>        PerlResponseHandler ModPerl::Registry
>        PerlOptions +ParseHeaders
>        Options          +ExecCGI
>     </Location>
>
> </IfModule>
>
> ......................................
> perl-startup.sh:
>
> #  file:perl-startup.pl
> #  ---------------
>   use Apache2 ();
>   use Apache::compat ();
>
>   use lib qw(/server/apache-dev/perl/);
>
>
>   use ModPerl::Util ();
>   use Apache::RequestRec ();
>   use Apache::RequestIO ();
>   use Apache::RequestUtil ();
>
>   use Apache::Server ();
>   use Apache::ServerUtil ();
>   use Apache::Connection ();
>   use Apache::Log ();
>
>   use APR::Table ();
>
>   use ModPerl::Registry ();
>
>   use Apache::Const -compile => ':common';
>   use APR::Const -compile => ':common';
>
>   1;
>
> ..........................................
>
>
> Thanks,
>
> Fredo
>
> --
> Dr. Fredo Sartori                        Tel. 030-227-55061
> SPD-Fraktion im Deutschen Bundestag      FAX  030-227-56169
> Platz der Republik                       e-mail: [EMAIL PROTECTED]
> 11011 Berlin
>
>

Reply via email to