Thanks for the input but perhaps the KEY criteria got lost in the
original post:
The script MUST connect to BOTH Oracle 8 and Oracle 10 WITHOUT
a username and password entered. From what I've seen a build on Oracle
10 will succeed ONLY with oracle 10 WITHOUT a user/password. The same
goes for Oracle 8.
There is a difference between versions in this regard and this is why I
can not use the same client libraries.
Have tested and both DBDs DO succeed loading their respective libraries:
oracle. Here are the minimum install for LD_LIBRARY_PATH
libclntsh.so.10.1* libnnz10.so*
oracle8:
libclntsh.so.8.0* libwtc8.so
And from what Ive seen it is LD_LIBRARY_PATH that allows the client libs
to be found - Not ORACLE_HOME. ORACLE_HOME is needed for tns_names.ora.
And I know there's no error checking, but please, lets not get hung up
on syntax - the examples are quick and dirty. ;-)
If can anyone successfully runs Alexander code when SERV1 is Oracle 8
and SERV2 is Oracle 10 - no username or password - PLEASE let me know
how its done.
Its my understanding that Oracle 8 uses system login info and Oracle 10
uses a wallet. If anyone has built a DBD that accomplished this in both
versions PLEASE let me know how.
Thanks. Any other solutions would be GREATLY appreciated.
;-)
On Wed, 2009-10-28 at 21:18 +0100, Alexander Foken wrote:
> On 28.10.2009 20:38, jeff wrote:
> > Hi all,
> >
> > Hope someone can help.
> >
> > I need to talk to both an oracle 8 and oracle 10 server in the same
> > script using their respective "external connections" capabilities (i.e.,
> > no user name or password -- system authentication on 8 & wallet on
> > 10 ).
> >
> Install the Oracle 10 Client libraries and let them handle the
> connection to both Oracle 8 server and Oracle 10 server. A difference
> of "only" two major version numbers should be no problem for them. See
> below.
> > Hacked up a version of DBD to get everything renamed from 'Oracle' to
> > 'Oracle8' and built against Oracle 8 libs. The other is built against
> > Oracle 10 libs. So I've 2 different builds in the same perl build:
> >
> Much, much unneeded pain that way.
> > I'm reading from a single tns_names.ora.
> > ( SERV2 is Oracle 10 & SERV1 is Oracle 8 )
> >
> So, why don't you use the same client libs?
> > ORACLE_HOME is the same each time.
> >
> That obviously can not work. If you have two sets of client libraries,
> you need two different ORACLE_HOMEs.
> > LD_LIBRARY_PATH includes 2 entries - 1 for Oracle 10 lib directory
> > and 1 for Oracle 8.
> >
> So one of the DBDs will succed loading the libs, and the other will fail.
> > So the environment is the same every time.
> >
> Sure, but it is broken.
> >
> > I can:
> > --------------------------------------------
> > use DBD::Oracle8;
> > my $db3=DBI->connect("dbi:Oracle8:SERV1",'','');
> > --------------------------------------------
> >
> Wrong. You NEVER load the DBD manually, DBI does that for you. And your
> code lacks the standard error check documented in the DBI documentation.
> > Or I can:
> > --------------------------------------------
> > use DBD::Oracle;
> > my $db3=DBI->connect("dbi:Oracle:SERV2",'','');
> > --------------------------------------------
> >
> Wrong, as above.
> > but:
> > --------------------------------------------
> > use DBD::Oracle8;
> > use DBD::Oracle;
> >
> > my $db3=DBI->connect("dbi:Oracle8:SERV1",'','');
> > my $db3=DBI->connect("dbi:Oracle:SERV2",'','');
> > --------------------------------------------
> > Will make both connections successfully, but exits
> > with a segmentation fault
> >
> Of course it segfaults, because one of the DBDs was compiled against
> Oracle 8 client libs, and the other against Oracle 10 client libs, and
> both attempt to load the same external libraries, because your
> ORACLE_HOME is always wrong for one of the DBDs.
>
> > Or if I reverse the connections:
> > --------------------------------------------
> > use DBD::Oracle8;
> > use DBD::Oracle;
> >
> > my $db3=DBI->connect("dbi:Oracle:SERV2",'','');
> > my $db3=DBI->connect("dbi:Oracle8:SERV1",'','');
> > --------------------------------------------
> > first connection succeeds and second fails.
> >
> Sure. Same reason.
> >
> > Also, these obviously fail because of wrong Oracle version:
> > --------------------------------------------
> > use DBD::Oracle;
> > my $db3=DBI->connect("dbi:Oracle:SERV1",'','');
> > --------------------------------------------
> > --------------------------------------------
> > use DBD::Oracle8;
> > my $db3=DBI->connect("dbi:Oracle8:SERV2",'','');
> > --------------------------------------------
> >
> > Any ideas as to why? Thanks.
> >
> Yes. Wrong way.
>
> Get rid of all the files you created by torturing DBD::Oracle into your
> DBD::Oracle8. Uninstall the Oracle 8 client. And to be sure, remove
> DBD::Oracle and the Oracle 10 client, re-install the Oracle 10 client,
> re-install an unmodified DBD::Oracle and compile it against the Oracle
> 10 client.
>
> This way, you will end with a single DBD::Oracle compiled against Oracle
> 10 client, and all those binary code provided by Oracle, hidden in
> several libraries, will take care of connecting to the Oracle 8 server.
>
> Your Perl code will simply look like this:
>
> #!/usr/bin/perl
> use warnings;
> use strict;
> use DBI;
> # no "use DBD::Oracle"!
>
> my $ora8=DBI->connect('dbi:Oracle:SERV1','','') or die "Can't connect to
> SERV1: $DBI::errstr";
> my $ora10=DBI->connect('dbi:Oracle:SERV2','','') or die "Can't connect
> to SERV2: $DBI::errstr";
>
> See also
> <http://search.cpan.org/~pythian/DBD-Oracle-1.23/Oracle.pm#CONNECTING_TO_ORACLE>
>
> and
> <http://search.cpan.org/~pythian/DBD-Oracle-1.23/Oracle.pm#CONNECTING_TO_ORACLE_II>
>
> for a long discussions of all the strange ways you can use to connect to
> Oracle.
>
> Alexander
>