While any of the clients will connect to either DB with a username &
password, 
the key requirement is connecting using an 'external' authentication
( ie, no name or password supplied in the DBI->connect )

The 10 client will use the wallet in Oracle 10, while the 8 client will
use the system login with Oracle 8 in our configurations.  

But from what I've experienced the clients are not compatible with this
type of connection.

If I'm wrong please let me know, I would love to use just 1 client !


On Thu, 2009-10-29 at 06:48 +1100, Steve Baldwin wrote:
> Probably a silly question, but why do you need two versions of
> DBD::Oracle?  Can't you build DBD::Oracle against an Oracle client
> that is able to connect to both versions?  I know the 9i client we
> currently use will connect to both 9i and 11g DB instances.  I'm
> pretty sure a couple of years ago we had a version that would connect
> to Oracle 7 and 9i.
> 
> May be a bit less hassle.
> 
> Steve
> 
> On Thu, Oct 29, 2009 at 6:41 AM, Martin J. Evans
> <martin.ev...@easysoft.com> 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