una sp2 solucion parada not datos connected conectado arranque oracle shell cron environment-variables

oracle - sp2 - libclntsh.so.11.1: no se puede abrir el archivo de objeto compartido.



sp2 0640 no conectado (10)

Cron no carga el perfil del usuario cuando ejecuta una tarea y debe incluir el perfil en su script de shell explícitamente.

here

Quiero programar una tarea en Linux por icrontab, y la tarea está escrita en python y tengo que importar el módulo cx_Oracle , así que exporto ORACLE_HOME y LD_LIBRARY_PATH en .bash_profile , pero cx_Oracle el error:

libclntsh.so.11.1: no se puede abrir el archivo de objeto compartido.

Dado que está bien ejecutar la tarea, emita el comando en shell como:

python a.py # ok

Cambio la tarea en icrontab en un script de shell que invoca mi script de Python, pero ¿la excepción se repite?

# the shell script scheduled in icrontab #! bash python a.py

¿Podrías ayudar a hacer con eso?


Esta publicación me ayudó a resolver un problema similar con un enlace de la base de datos PostgreSQL a Oracle usando oracle_fdw .

Instalé oracle_fdw pero cuando intenté CREATE EXTENSION oracle_fdw; Recibí el error could not load library libclntsh.so.11.1: cannot open shared object file: No such file or directory.

$ORACLE_HOME , $PATH y $LD_LIBRARY_PATH .

Funcionó solo DESPUÉS de que puse Oracle Shared Library en Linux Shared Library

echo /opt/instantclient_11_2 > oracle.conf ldconfig


He copiado todos los archivos de la biblioteca de las bases de datos de medios de instalación / stage / ext / lib a $ ORACLE_HOME / lib y resolví el problema.


Las librerías se encuentran en /u01/app/oracle/product/11.2.0/xe/lib (para Oracle XE) o similar.

Debe agregar esta ruta a /etc/ld.so.conf o si este archivo solo muestra una ubicación de inclusión, como en un archivo separado en el directorio /etc/ld.so.conf.d

Tengo oracle.conf en /etc/ld.so.conf.d , solo un archivo con la ruta. Nada más.

Por supuesto, no se olvide de ejecutar ldconfig como último paso.


Me encontré con este mismo problema el fin de semana pasado cuando necesitaba usar cx_Oracle. Después de pasar mucho tiempo tratando de modificar la variable LD_LIBRARY_PATH para incluir $ ORACLE_HOME / lib directoy, donde reside libclntsh.so, terminé resolviendo el problema creando enlaces simbólicos desde todas las bibliotecas Oracle xlibx.so en / lib / xlibx .asi que. Esta no es ciertamente la solución "más limpia", pero tiene una buena probabilidad de funcionar sin causar demasiados problemas:

cd $ORACLE_HOME/lib for f in `ls ./*.so*`; do; sudo ln -s $ORACLE_HOME/lib/$f /lib/$f done

Después de que hice eso, cx_Oracle funcionó a la perfección.


Para el beneficio de que alguien más venga aquí, lo mejor que puede hacer es actualizar cx_Oracle a la última versión (6+). Esta versión no necesita que LD_LIBRARY_PATH esté configurado.


Posiblemente desee especificar PATH , y también ORACLE_HOME y LD_LIBRARY_PATH , para que cron(1) sepa dónde encontrar los binarios.
Lea "5 entorno Crontab" here .


Si tiene problemas con libclntsh.so, necesita crear un enlace simbólico para libclntsh.so desde /usr/lib/oracle/11.2/client64/lib a /usr/lib


Siempre tengo este problema, puedo resolverlo ejecutando el siguiente código: export LD_LIBRARY_PATH = / opt / oracle / instantclient: $ LD_LIBRARY_PATH

OBS: Este código lo guardé en el archivo de configuración porque siempre lo uso. buena suerte.


Simplemente pase sus variables de ruta de Oracle antes de ejecutar cualquier script:
Al igual que para Perl, puede agregar a continuación al principio de su script:

BEGIN { my $ORACLE_HOME = "/usr/lib/oracle/11.2/client64"; my $LD_LIBRARY_PATH = "$ORACLE_HOME/lib"; if ($ENV{ORACLE_HOME} ne $ORACLE_HOME || $ENV{LD_LIBRARY_PATH} ne $LD_LIBRARY_PATH ) { $ENV{ORACLE_HOME} = "/usr/lib/oracle/11.2/client64"; $ENV{LD_LIBRARY_PATH} = "$ORACLE_HOME/lib"; exec { $^X } $^X, $0, @ARGV; } }