Oracle
 sql >> Baza danych >  >> RDS >> Oracle

%ENV nie działa i nie mogę korzystać z biblioteki współdzielonej

LD_LIBRARY_PATH zmienna środowiskowa musi być ustawiona przed Twój program się uruchomi — przed perl sam jest załadowany. Zmiana w BEGIN{} wpłynie na nowe programy zaczynasz, ale nie wpłynie to na ładowanie bibliotek współdzielonych — w tym przypadku (chociaż nigdy nie korzystałem z DBD::Oracle) ładujesz plik Oracle .so do już działającego programu, więc jest „za późno” na zmianę LD_LIBRARY_PATH . Dynamiczny linker /lib/ld.so (lub tak) jest uruchamiany przed perl , więc do czasu skompilowania skryptu i BEGIN{} działa, jest już skonfigurowany.

możesz spróbuj ponownie wykonać swój skrypt jako jego własnego następcę lub coś takiego*, ale krótki skrypt powłoki prawie na pewno będzie najprostszym rozwiązaniem:

  #!/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łoby trochę szalone, 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tomcat 9 z Apache DBCP + Spring 5 + Oracle 12c + SqlArrayValue

  2. Połączenie Laravel i Oracle

  3. Funkcja LITAGG:wynik konkatenacji ciągów jest za długi

  4. Pobieranie wpisów połączonej listy w relacyjnej bazie danych

  5. Otwórz modalne okno dialogowe za pomocą JavaScript Oracle APEX