can you run strace, or the HP equivalent, to see what system calls are getting made and what files are and are not found?

the system call that doesn't return is likely where the problem is. Check the time stamp of any file that is loaded to see if it was changed recently. Any file that it looks for in more than one location is a candidate for a file that might have been accidentally deleted.

On 06/26/2013 02:35 PM, 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

I tried isql -v prod1 username password

and it just hung like other attempts to access the database. No error messages.




On Wed, Jun 26, 2013 at 12:11 PM, Martin J. Evans <boh...@ntlworld.com <mailto:boh...@ntlworld.com>> 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



Reply via email to