Hi Lyle,

> I does seem to be an ORACLE environment issue.

Yes, I added printing out ORACLE ENV script in Oracle.pm as following.

----[perl5.6.1normal/lib/site_perl/5.6.1/i686-linux/DBD/Oracle.pm] line 259
 print "DEBUG DBD[3] : dbh=[$dbh], dbname=[$dbname], user=[$user],
auth=[$auth], attr=[$attr]<br>\n";
 for(keys %$attr){
  print "attr{$_}=[${$attr}{$_}]<br>\n";
 }
 for(keys %ENV){
  print "ENV{$_}=[$ENV{$_}]<br>\n";
 }

 # Call Oracle OCI logon func in Oracle.xs file
 # and populate internal handle data.
 DBD::Oracle::db::_login($dbh, $dbname, $user, $auth, $attr)
     or return undef;
--------


It showed correct ORACLE ENV and $dbh and so on, but it couldn't connect at
next DBD::Oracle::db::_login(). It showed errror of ORACLE_HOME and NLS
settings...

But it worked fine on normal CGI-script.
The printed out %ENV from there were as following on mod_perl2 and normal
CGI-script.


----[%ENV on mod_perl2]----
ENV{GATEWAY_INTERFACE}=[CGI-Perl/1.1]
ENV{SERVER_SOFTWARE}=[Apache/2.0.39 (Unix) mod_perl/1.99_04-dev Perl/v5.6.1]
ENV{MOD_PERL}=[mod_perl/1.99_04-dev]
ENV{ORACLE_HOME}=[/u01/app/oracle/product/9.0.1]
ENV{ORACLE_SID}=[ynt0]
ENV{NLS_LANG}=[japanese_japan.ja16euc]
--------

----[%ENV on normal CGI-script]----
ENV{GATEWAY_INTERFACE}=[CGI/1.1]
ENV{SERVER_SOFTWARE}=[Apache/2.0.39 (Unix)]
ENV{ORACLE_HOME}=[/u01/app/oracle/product/9.0.1]
ENV{ORACLE_SID}=[ynt0]
ENV{NLS_LANG}=[japanese_japan.ja16euc]
--------

Maybe I should check more deep area...
By the way, is there anyone who is working DBD Oracle under mod_perl2?

Thank you.

Atsushi


----- Original Message -----
From: "Lyle Brooks" <[EMAIL PROTECTED]>
To: "Atsushi Fujita" <[EMAIL PROTECTED]>
Cc: "Fredo Sartori" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Thursday, August 15, 2002 11:07 PM
Subject: Re: apache2, DBD/Oracle problem


> I does seem to be an ORACLE environment issue.
>
> IIRC, the original post had the Oracle environment variables set in a
> BEGIN block.
>
> I ran into a similar issue, where I changed ORACLE_HOME and TNS_ADMIN to
> point to a new location.  I set these in a BEGIN block in my startup.pl
> file.  But the mod_perl code kept going back to the old location.
>
> I finally tracked it down that another section of my code base was setting
> the Oracle environment variables back to their original locations.  Once
> I tracked that down and corrected it, I had no more problems.  But for
> awhile I thought either mod_perl was loosing it.
>
> So...."it could be" that another script (ie. something loaded in the
> startup.pl or equivalent) is affecting the Oracle environment variables
> in some way.  That would be consistent with your observations that the
> script works fine on the command-line, but not in the mod_perl environment.
>
> You might want to print out the Oracle environment variables right before
> you do your connect, just to test this.
>
> Hopefully it's that simple.
>
>
>
> Quoting Atsushi Fujita ([EMAIL PROTECTED]):
> > 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