Yes, They are built against the different 
Oracle libs.

If anyone has solved this before I'm happy 
to abandon this strategy
:-)

On Wed, 2009-10-28 at 19:41 +0000, Martin J. Evans wrote:
> 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 ).
> > 
> > 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:
> > 
> > ./lib/site_perl/5.8.9/i686-linux/DBD/Oracle.pm
> > ./lib/site_perl/5.8.9/i686-linux/DBD/Oracle8.pm
> > ./lib/site_perl/5.8.9/i686-linux/auto/DBD/Oracle/Oracle.h
> > ./lib/site_perl/5.8.9/i686-linux/auto/DBD/Oracle/Oracle.so
> > ./lib/site_perl/5.8.9/i686-linux/auto/DBD/Oracle/Oracle.bs
> > ./lib/site_perl/5.8.9/i686-linux/auto/DBD/Oracle8/Oracle8.so
> > ./lib/site_perl/5.8.9/i686-linux/auto/DBD/Oracle8/Oracle8.bs
> > ./lib/site_perl/5.8.9/i686-linux/auto/DBD/Oracle8/Oracle8.h
> > 
> > ( Oracle.pm is oracle 10 & Oracle8.pm is oracle 8 )
> > 
> > I'm reading from a single tns_names.ora.
> > ( SERV2 is Oracle 10 & SERV1 is Oracle 8 )
> > ORACLE_HOME is the same each time.
> > LD_LIBRARY_PATH includes 2 entries - 1 for Oracle 10 lib directory 
> > and 1 for Oracle 8.
> > So the environment is the same every time.
> > 
> > 
> > I can:
> > --------------------------------------------
> > use DBD::Oracle8;
> > my $db3=DBI->connect("dbi:Oracle8:SERV1",'','');
> > --------------------------------------------
> > 
> > Or I can:
> > --------------------------------------------
> > use DBD::Oracle;
> > my $db3=DBI->connect("dbi:Oracle:SERV2",'','');
> > --------------------------------------------
> > 
> > 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
> > 
> > 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.
> > 
> > 
> > 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.
> > 
> > Jeff
> 
> I'd hope someone else can come up with a different solution to your
> problem but I'd be surprised if it worked as you have done it.
> 
> I'm assuming the DBD::Oracle8 is linked against a different set of
> client libs to DBD::Oracle?
> 
> For a start, the 2 oracle client libs will export a lot of the same
> symbols and so when you call oci_xxx where is it resolved - in the
> oracle 8 client or the other one. To make this work you'd need the
> dynamic linker to group the symbols and work down the group - I think it
> /may/ be worth setting PERL_DL_NONLAZY and exporting it (or whatever it
> is - run make test for DBD::Oracle and watch the output looking for the
> xxxLAZY environment variable). If this works it pretty much proves it
> but I'd still hope there is a better solution.
> 
> I think you have probably entered a world of pain.
> 
> Martin
> 
> 

Reply via email to