Re: ODBC Driver failing?
"Martin J. Evans" <[email protected]>
| Newsgroups | gmane.comp.lang.perl.modules.dbi.general |
|---|---|
| Organization | at home |
| Message-ID | <[email protected]> |
On 26/06/2013 20:29, Dan Bent wrote: > I have strace, but don't know how to use it. Usually something like: strace -o out.log isql -v mydsn username password then after it hangs hit ctrl/c and look at (paste here) the last 100 lines of out.log Martin > > On Wed, Jun 26, 2013 at 2:01 PM, Martin J. Evans <[email protected] > <mailto:[email protected]>> wrote: > > On 26/06/2013 19:35, Dan Bent wrote: > > Big thanks! > > I did this: > ldd > /opt/perl_32/lib/site_perl/5.__8.8/PA-RISC1.1-thread-multi/__auto/DBD/ODBC/ODBC.sl > > and got: > > /usr/local/liant/lib/libodbc.__sl.1 => > /usr/local/liant/lib/libodbc.__sl.1 > /usr/lib/libc.2 => /usr/lib/libc.2 > /usr/lib/libdld.2 => /usr/lib/libdld.2 > /usr/lib/libc.2 => /usr/lib/libc.2 > /usr/lib/libpthread.1 => /usr/lib/libpthread.1 > > > hmm - never heard of "liant". It looks like the unixODBC driver > manager but I've never seen it installed in that location. Also, I > see you've got isql and that comes with unixODBC. Have you also got > a binary called odbcinst and if you have output from odbcinst -j > would be useful. > > > I tried isql -v prod1 username password > > and it just hung like other attempts to access the database. No > error > messages. > > > OK, so we've ruled out a change in Perl and DBI and DBD::ODBC as it > is still going wrong without them. If this really is unixODBC you > should have an odbc.ini and odbcinst.ini file probably in > /usr/local/liant/etc or /usr/local/etc of /etc. What is in those > files? There may also be a .odbc.ini in the users home dir. > > When we see the contents of those files we'll have a better idea of > what driver you are using and the shared library used so you can > check that too to see if it has been updated. > > You could enable unixODBC tracing but it rarely outputs much before > connection is complete. I think you need to find the equivalent of > strace on HPUX and run it on the isql command to see what system > calls are being made. > > Did you say everything is on one box, so networking off that box > cannot be the issue? > > Martin > > > > > On Wed, Jun 26, 2013 at 12:11 PM, Martin J. Evans > <[email protected] <mailto:[email protected]> > <mailto:[email protected] <mailto:[email protected]>>> wrote: > > On 26/06/2013 17:28, Dan Bent wrote: > > I suddenly lost the ability to connect to my ODBC database > yesterday, > after years of using the same function to establish a > connection: > > sub dbaseconnect { > if (defined($testing)) { > if ($testing eq "YES") { > $dsn = 'dbi:ODBC:test1' ; > print "Using test database\n" ; > } elsif ($testing eq "TRAIN") { > $dsn = 'dbi:ODBC:train1' ; > print "Using train1 database\n" ; > } else { > $dsn = 'dbi:ODBC:prod1' ; > } > } else { > $dsn = 'dbi:ODBC:prod1' ; > } > $user = 'USER' ; > $passwd = 'PASSWORD' ; > my %adrivers = DBI->available_drivers(); > print join(", ", %adrivers), "\n" ; > > print "connecting to DATABASE $dsn $user > $passwd\n" ; > $dbh = DBI->connect($dsn, $user, $passwd, > {RaiseError => 1, AutoCommit => 0}) > or die "Could not connect to database: " . > DBI->errstr ; > print "connected to DATABASE $dsn \n" ; > } > > So, to gather information about where the failure is, I > ran the > following program: > > #! /usr/bin/perl > > use DBI ; > use DBD::ODBC ; > use strict ; > use warnings ; > > print "Available Drivers: " ; > my @adrivers = DBI->available_drivers(); > print join(", ", @adrivers), "\n" ; > > print "Data Sources: " ; > foreach my $driver ( @adrivers ) { > print "Driver: $driver\n"; > my @dataSources = DBI->data_sources( $driver ); > foreach my $dataSource ( @dataSources ) { > print "\tData Source is $dataSource\n"; > } > print "\n"; > } > > and the output I got was: > > Available Drivers: DBM, ExampleP, File, ODBC, Proxy, Sponge > Installed Drivers: > Data Sources: Driver: DBM > Data Source is DBI:DBM:f_dir=. > Data Source is DBI:DBM:f_dir=CIGNA > Data Source is DBI:DBM:f_dir=Logs > Data Source is DBI:DBM:f_dir=ONCOURSE > Data Source is DBI:DBM:f_dir=autemp > Data Source is DBI:DBM:f_dir=config > Data Source is DBI:DBM:f_dir=fh.cob > Data Source is DBI:DBM:f_dir=perlscripts > Data Source is DBI:DBM:f_dir=pndspndwk > Data Source is DBI:DBM:f_dir=prgrun_dir > Data Source is DBI:DBM:f_dir=scripts > > Driver: ExampleP > Data Source is dbi:ExampleP:dir=. > > Driver: File > Data Source is DBI:File:f_dir=. > Data Source is DBI:File:f_dir=CIGNA > Data Source is DBI:File:f_dir=Logs > Data Source is DBI:File:f_dir=ONCOURSE > Data Source is DBI:File:f_dir=autemp > Data Source is DBI:File:f_dir=config > Data Source is DBI:File:f_dir=fh.cob > Data Source is DBI:File:f_dir=perlscripts > Data Source is DBI:File:f_dir=pndspndwk > Data Source is DBI:File:f_dir=prgrun_dir > Data Source is DBI:File:f_dir=scripts > > Driver: ODBC > > and the program just hangs when it looks for data > sources using > the ODBC > driver. So, I suspect that there are issues with the ODBC > driver. Here > are the versions of the various DBI module components: > > perl -MDBI -e 'DBI->installed_versions' > Perl : 5.008008 (PA-RISC1.1-thread-multi) > OS : hpux (11.00) > DBI : 1.50 > DBD::Sponge : 11.10 > DBD::Proxy : install_driver(Proxy) failed: > Can't locate > RPC/PlClient.pm in @INC > DBD::ODBC : 1.14 > DBD::File : 0.33 > DBD::ExampleP : 11.12 > DBD::DBM : 0.03 > > I imagine that I may not have the latest versions of > everything, and > updates are probably in order, but, while updates are > desirable, I'd > like to be sure that I'm addressing the root cause of the > problem, so I > get it resolved. This issue affects a lot of programs, > and is > critical > to our business. > Any help or suggestions will be greatly appreciated. > > > You are in deed running VERY old versions - especially of > DBD::ODBC. > > You first need to think about what Jonathan said - he's > probably > right that working out what changed yesterday is probably > going to > give the quickest result. > > Assuming you cannot find anything here are some suggestions. > > DBD::ODBC is usually linked to an ODBC driver manager but > back in > the days of 1.14 people still linked directly to an ODBC driver > sometimes - ODBC drivers did not support enumerating DSNs - > only the > driver manager does that. So first thing is hwo was > DBD::ODBC built? > If you don't know that look for ODBC.so in your perl tree > and run > the HPUX equivalent of Linux's ldd command on it to find what > libraries it depends on (right now I cannot remember what the > command is). > > Once you've done that if the answer is libodbc.so.something > then you > are probably using the unixODBC driver manager. In that > case you > should hopefully have an isql binary and you should have an > odbc.ini > and odbcinst.ini defining your drivers and DSNs. What is in > those > files. Can you run: > > isql -v TEST1 username password > isql -v TRAIN1 username password > isql -v PROD1 username password > > as you didn't say which one you are using? > > If you get back with this info I'll help more. > > Martin > -- > Martin J. Evans > Wetherby, UK > > > > > -- Martin J. Evans Wetherby, UK