Solved

perl with DBI, DBD, oracle, crontab problem

Posted on 2009-04-09
4
1,583 Views
Last Modified: 2013-12-27
i'm on SUNOS SunOS sparc 5.10
install perl 5.8.4, DBI to work with Oracle database.
my perl script works fine when i log into my server and type a command:
./my_script.pl
but when i put it into crontab, it fails with message:

install_driver(Oracle) failed: Can't load '/usr/perl5/site_perl/5.8.4/sun4-solaris-64int/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: ld.so.1: perl: fatal: /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1: wrong ELF class: ELFCLASS64 at /usr/perl5/5.8.4/lib/sun4-solaris-64int/DynaLoader.pm line 230.
 at (eval 16) line 3
Compilation failed in require at (eval 16) line 3.
Perhaps a required shared library or dll isn't installed where expected
 at /export/home/inuser/k1c/my_script.pl line 96


in which line 96 in my_script.pl is:
my $dbh=DBI->connect('dbi:Oracle:orcl','user','password', {AutoCommit =>0});


what's wrong with DBI or crontab?
P/S: i will increase my points periodically
0
Comment
Question by:nanoterabeta
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 25

Expert Comment

by:lwadwell
ID: 24106060
Hi nanoterabeta,

crontab scripts run without a .profile (or similar).  Hence your environment is probably not set correctly when it runs under cron.  I think the problem, in this case, is the missing LD_LIBRARY_PATH environment variable - but there may be others.

lwadwell
0
 
LVL 40

Accepted Solution

by:
mrjoltcola earned 35 total points
ID: 24108204
This usually happens when you are mismatching 32-bit and 64-bit programs / libraries.

Try typing this to verify that you may have mismatch.

file /usr/perl5/site_perl/5.8.4/sun4-solaris-64int/auto/DBD/Oracle/Oracle.so
file /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1

They both need to either be ELF 32-bit or ELF 64-bit, but not mixed.

If the Perl lib is 64-bit, then the question is are you running 64-bit Oracle? By default, 64-bit Oracle's lib is 64-bit, and so your code should work, but if vice-versa (Perl 32-bit, Oracle 64-bit, you need to set LD_LIBRARY_PATH to use $ORACLE_HOME/lib32).
0
 

Author Comment

by:nanoterabeta
ID: 24113190
that's awesome,
in my situation, Perl 32-bit and Oracle 64-bit, in command line mode, i can use SET command to see this:
LD_LIBRARY_PATH=/u01/app/oracle/product/10.2.0/db_1/lib32
so my script can work in command line
but how can i set this variable in crontab mode? what should i add to my script or something?
0
 

Author Comment

by:nanoterabeta
ID: 24113336
ok, that works
i create my_script.sh
put the following into it:
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
LD_LIBRARY_PATH=/u01/app/oracle/product/10.2.0/db_1/lib32
export LD_LIBRARY_PATH
/export/home/inuser/k1c/my_script.pl

and it works fine in crontab mode
many thanks to mrjoltcola
sorry i have few points left
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A year or so back I was asked to have a play with MongoDB; within half an hour I had downloaded (http://www.mongodb.org/downloads),  installed and started the daemon, and had a console window open. After an hour or two of playing at the command …
Shell script to create broker configuration file using current broker Configuration, solely for purpose of backup on Linux. Script may need to be modified depending on OS-installation. Please deploy and verify the script in a test environment.
This video shows, step by step, how to configure Oracle Heterogeneous Services via the Generic Gateway Agent in order to make a connection from an Oracle session and access a remote SQL Server database table.
This video shows how to recover a database from a user managed backup

729 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question