How to fix "can't load oracle.so" error for script using Oracle DB?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • William Shen
    New Member
    • Jan 2011
    • 2

    How to fix "can't load oracle.so" error for script using Oracle DB?

    Hi everyone.

    I want to create a crawler with perl and run it on crowntab. The program should use DBI and DBD::Oracle to insert data into my database.

    When crontab runs it, I get the following error in my mail box.

    Can't load '/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.10 .1: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/Dynaloader.pm line 230.

    my code is something like:
    Code:
    #!/usr/bin/perl 
     
    use Getopt::Long; 
    use POSIX; 
    use POSIX qw(setsid); 
    use warnings; 
    use Data::Dumper; 
    use WWW::Mechanize; 
    use DBI; 
    use DBD::Oracle; 
    use XML::Twig; 
     
    init_env(); 
     
    #do something----- 
     
    sub init_env 
    { 
        $SIG{'INT'}  = 'IGNORE'; 
        $SIG{'QUIT'} = 'IGNORE'; 
        $SIG{'TERM'} = 'IGNORE'; 
        $SIG{'PIPE'} = 'IGNORE'; 
        # signal(SIGPIPE, SIG_IGN); 
        $SIG{'CHLD'} = 'IGNORE'; 
     
        my $pid = fork(); die "$!" unless defined $pid; exit 4 if $pid; 
     
         
        POSIX::setsid() or die "Can't start a new session: $!"; 
     
        # Flush standard output buffer. 
        select(STDOUT); 
        $| = 1; 
    } 
     
     
    BEGIN 
    { 
            $ENV{ORACLE_HOME} = "/u01/oracle/product/10.2.0/client_1"; 
            $ENV{PATH} = "/bin:/usr/bin:/u01/oracle/product/10.2.0/client_1/bin:/home/appowner/bin:."; 
            $ENV{LD_LIBRARY_PATH} = "/u01/oracle/product/10.2.0/client_1/lib"; 
     
    } 
    END { 
     
     }
    I have installed both DBI and DBD::Oracle with CPAN.

    Please help and many thanks.

    Shen
    Last edited by numberwhun; Jan 27 '11, 01:55 AM. Reason: Please use code tags!
  • William Shen
    New Member
    • Jan 2011
    • 2

    #2
    Hey I have figured out there is something wrong with my DBD installation, I corrected it and it run fine when I do it manually on command line, but still getting same error when crontab calls it. I read it on some other site that people suggest to set LD_LIBRARY_PATH to point to where the shared library is. But as you can see, I have set it to the location where "libclntsh.so.1 0.1" is located. =(

    Comment

    • chorny
      Recognized Expert New Member
      • Jan 2008
      • 80

      #3
      Did you try setting LD_LIBRARY_PATH to both directories, colon-separated?

      Comment

      Working...