Oracle
 sql >> база данни >  >> RDS >> Oracle

%ENV не работи и не мога да използвам споделена библиотека

LD_LIBRARY_PATH променливата на средата трябва да бъде зададена преди вашата програма стартира — преди perl самата е заредена. Промяна в BEGIN{} ще засегне нови програми който стартирате, но това няма да повлияе на зареждането на споделени библиотеки — в този случай (въпреки че никога не съм използвал DBD::Oracle) вие зареждате Oracle .so във вече работещата програма, така че е „твърде късно“ да промените LD_LIBRARY_PATH . Динамичният линкер /lib/ld.so (или така) се стартира преди perl , така че докато вашият скрипт бъде компилиран и BEGIN{} работи, вече е настроено.

Вие можете опитайте да изпълните отново скрипта си като негов собствен наследник или нещо подобно*, но кратък скрипт на обвивката почти сигурно ще бъде най-простото решение:

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

*- това би било доста лудо, но 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. ORA-29024:Неуспешно валидиране на сертификата

  2. Как да премахнете част от низа в oracle

  3. Стъпка по стъпка процес на надграждане за R12.2 Надстройка, част -1

  4. DatabaseMetaData.getColumns връща празен ResultSet за синоними

  5. Намерете диапазони от поредица от числа в SQL/Oracle