Solved

perl with DBI, DBD, oracle, crontab problem

Posted on 2009-04-09
4
1,520 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
  • 2
4 Comments
 
LVL 25

Expert Comment

by:lwadwell
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

How to Create User-Defined Aggregates in Oracle Before we begin creating these things, what are user-defined aggregates?  They are a feature introduced in Oracle 9i that allows a developer to create his or her own functions like "SUM", "AVG", and…
This post first appeared at Oracleinaction  (http://oracleinaction.com/undo-and-redo-in-oracle/)by Anju Garg (Myself). I  will demonstrate that undo for DML’s is stored both in undo tablespace and online redo logs. Then, we will analyze the reaso…
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.
Via a live example, show how to restore a database from backup after a simulated disk failure using RMAN.

743 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now