sql >> Base de Datos >  >> RDS >> Oracle

%ENV no funciona y no puedo usar la biblioteca compartida

El LD_LIBRARY_PATH la variable de entorno debe configurarse antes su programa comienza, antes de perl en sí mismo está cargado. Cambiándolo en BEGIN{} afectará a nuevos programas que inicie, pero no afectará la carga de bibliotecas compartidas — en este caso (aunque nunca he usado DBD::Oracle) estás cargando un Oracle .so en el programa que ya se está ejecutando, por lo que es "demasiado tarde" para cambiar el LD_LIBRARY_PATH . El enlazador dinámico /lib/ld.so (más o menos) se inicia antes de perl , por lo que en el momento en que su secuencia de comandos esté compilada y BEGIN{} se ejecuta, ya está configurado.

podrías intente volver a ejecutar su secuencia de comandos como su propio sucesor o algo así *, pero una breve secuencia de comandos de shell seguramente será la solución más simple:

  #!/bin/sh
  export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client64/lib
  export ORACLE_SID=prod
  exec /usr/local/bin/your-db-program "[email protected]"

*- esto sería un poco loco, pero TIMTOWTDI:

  eval { 
     use DBD::Oracle foo bar baz; …
  };
  if ([email protected] =~ /install_driver\(Oracle\) failed/) {
     $ENV{LD_LIBRARY_PATH} .= ':/usr/lib/oracle/10.2.0.3/client64/lib';
     $ENV{ORACLE_SID} = 'prod';
     warn "Restarting with LD_LIBRARY_PATH reset:\n\[email protected]\n";
     exec { $0 } $0 => @ARGV;
  }