Hi Jonathan,
you saved my day!
as as workaround i wrote this shell skript:
LD_LIBRARY_PATH="/export/home/oracle/product/10.2.0/lib:/export/home/oracle/product/10.2.0/lib32"
export LD_LIBRARY_PATH
/oracle/dba/backup/ora19/DbOnline.pl ora19
and now it works. Thank you !
... But this is a workaround i do not like very much. Reexecuting the
skript might be a way (probably i will do this). Is there another
possibility?
cu, Christian
Jonathan Leffler wrote:
On Wed, May 28, 2008 at 11:47 PM, Christian Merz
<[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
i set the environment in my skript, the libs are installed correctly
- or the script won't run interactively.
I'm not the Oracle expert - treat what I say with a pinch of salt.
I do use Solaris 10 quite a lot, though - it's my main development platform.
LD_LIBRARY_PATH must be set before ld.so.1 runs (because ld.so.1 reads
the env var just once and ignores any subsequent changes to it), and
ld.so.1 runs before Perl gets going. So, if your Perl script sets
LD_LIBRARY_PATH, it is too late to influence ld.so.1 (and dlopen()
etc). I've proved that the hard way - with SUID programs and dlopen()
function calls in the mix too.
Try modifying your cron job so that it runs a shell script which sets at
least LD_LIBRARY_PATH before invoking perl at all (use exec perl ...).
I suspect it will work better then. If that isn't feasible (for some
brain-dead administrative nightmare of a reason), then try having the
Perl code set LD_LIBRARY_PATH and then re-exec itself. I've seen that
work too. Weird stuff. The hard part is making sure that the re-exec
happens just once!
On the other hand, this may still be off-target. But 'stuff works at
command line and not when run by cron or web server' almost always ends
up as 'the problem is environment'.
so, there is a problem with the environment but i cannot see it. is
there something important besides @INC and %ENV?
i already tried both versions of LD_LIBRARY_PATH
/oracle/product/10.2.0/lib:/oracle/product/10.2.0/lib32
/oracle/product/10.2.0/lib32:/oracle/product/10.2.0/lib
(as Alexander Alekseev <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
suggested)
here are full outputs of my %ENV.
----------
1. interactively - runs ok
CLASSPATH ->
:/oracle/product/10.2.0/classes/oracle:/oracle/product/10.2.0/jlib:/oracle/product/10.2.0/lib
EDITOR -> vi
HOME -> /export/home/oracle
LD_LIBRARY_PATH ->
/oracle/product/10.2.0/lib32:/oracle/product/10.2.0/lib
LOGNAME -> oracle
MAIL -> /usr/mail/oracle
MANPATH -> /usr/share/man:/opt/nsr/man
NLS_LANG -> AMERICAN_AMERICA.WE8DEC
OLDPWD -> /export/home/oracle
ORACLE_BASE -> /oracle
ORACLE_HOME -> /oracle/product/10.2.0
ORACLE_PATH -> /oracle/product/10.2.0/bin
ORACLE_SID -> ora19
ORA_NLS10 -> /oracle/product/10.2.0/nls/data
PATH -> /oracle/product/10.2.0/bin:/usr/ccs/bin:/usr/bin:/bin
PS1 -> db03:oracle:[$ORACLE_SID]$PWD >
PWD -> /oracle/dba/backup/ora19
SHELL -> /bin/ksh
SHLVL -> 1
SSH_CLIENT -> 10.1.3.132 <http://10.1.3.132> 55755 22
SSH_CONNECTION -> 10.1.3.132 <http://10.1.3.132> 55755
194.246.199.137 <http://194.246.199.137> 22
SSH_TTY -> /dev/pts/2
TERM -> xterm
TNS_ADMIN -> /oracle/product/10.2.0/network/admin
TZ -> MET
USER -> oracle
_ -> ./DbOnline.pl
----------
2. as cron job - with 'wrong ELF error'
CLASSPATH ->
/oracle/product/10.2.0/classes/oracle:/oracle/product/10.2.0/jlib:/oracle/product/10.2.0/lib:/oracle/product/10.2.0/classes/oracle:/oracle/product/10.2.0/jlib:/oracle/product/10.2.0/lib
HOME -> /export/home/oracle
LD_LIBRARY_PATH ->
/oracle/product/10.2.0/lib32:/oracle/product/10.2.0/lib
LOGNAME -> oracle
NLS_LANG -> AMERICAN_AMERICA.WE8DEC
ORACLE_HOME -> /oracle/product/10.2.0
ORACLE_SID -> ora19
ORA_NLS10 -> /oracle/product/10.2.0/nls/data
PATH -> /oracle/product/10.2.0/bin:/usr/ccs/bin:/usr/bin:/bin
SHELL -> /usr/bin/sh
TZ -> MET
----------
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:
/oracle/product/10.2.0/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 7) line 3
Compilation failed in require at (eval 7) line 3.
Perhaps a required shared library or dll isn't installed where expected
at /oracle/dba/backup/ora19/DbOnline.pl line 514
Jonathan Leffler wrote:
On Wed, May 28, 2008 at 8:30 AM, Christian Merz
<[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
<mailto:[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>> wrote:
i wrote a skript which works fine for several Oracle Versions on
several platforms (linux, solarias 8/9).
if i run that script ineractively on solaris 10 it also works
fine.
if i run it as a cron job i get:
cron does not set the environment, so you must do so for it.
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:
/oracle/product/10.2.0/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 8) line 3
Compilation failed in require at (eval 8) line 3.
Perhaps a required shared library or dll isn't installed
where expected
32-bit Client library - 64-bit Perl - won't work.
Install 32-bit Perl or 64-bit client libraries.
Or just set the environment.
--
Jonathan Leffler <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> #include <disclaimer.h>
Guardian of DBD::Informix - v2008.0513 - http://dbi.perl.org
"Blessed are we who can laugh at ourselves, for we shall never cease to
be amused."