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.
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
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;
}
}