sql >> Databáze >  >> RDS >> Oracle

%ENV nefunguje a nemohu použít sdílenou knihovnu

LD_LIBRARY_PATH proměnná prostředí musí být nastavena před váš program se spustí — před perl sám je nabitý. Změna v BEGIN{} ovlivní nové programy které spustíte, ale neovlivní to načítání sdílených knihoven — v tomto případě (ačkoli jsem nikdy nepoužil DBD::Oracle) načítáte Oracle .so do již běžícího programu, takže na změnu LD_LIBRARY_PATH je již „příliš pozdě“ . Dynamický linker /lib/ld.so (nebo tak) se spustí před perl , takže v době, kdy je váš skript zkompilován, a BEGIN{} běží, je již nastaven.

Mohli byste zkuste znovu spustit svůj skript jako jeho vlastního nástupce nebo tak něco*, ale krátký shell skript bude téměř jistě tím nejjednodušším řešením:

  #!/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]"

*- to by bylo trochu šílené, ale 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;
  }


  1. S (NOLOCK) vs. SET ÚROVNĚ IZOLACE TRANSAKCE PŘEČTĚNO NEZÁVAZNĚ

  2. MySQL Vyberte jiný řádek, pokud žádný neexistuje

  3. Výpočet časového rozdílu před 6:00 a po 22:00 v MySQL

  4. Použití Pythonu a MySQL v procesu ETL:SQLAlchemy