sql >> Database teknologi >  >> RDS >> Oracle

%ENV virker ikke, og jeg kan ikke bruge delt bibliotek

LD_LIBRARY_PATH miljøvariablen skal indstilles før dit program starter — før perl selv er indlæst. Ændre det i BEGIN{} vil påvirke nye programmer at du starter, men det vil ikke påvirke indlæsningen af ​​delte biblioteker — i dette tilfælde (selvom jeg aldrig har brugt DBD::Oracle) indlæser du en Oracle .so ind i det allerede kørende program, så det er "for sent" at ændre LD_LIBRARY_PATH . Den dynamiske linker /lib/ld.so (eller deromkring) startes før perl , så når dit script er kompileret og BEGIN{} kører, er den allerede sat op.

Du kunne prøv at udføre dit script igen som dets egen efterfølger eller noget*, men et kort shell-script vil næsten helt sikkert være den enkleste løsning:

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

*- det ville være lidt skørt, men 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ådan konverteres ISO8601 til datoformat i php

  2. ORA-00907:manglende højre parentes

  3. PostgreSQL drop-rolle mislykkes på grund af standardprivilegier

  4. PHP:Stjerneklassificeringssystemkoncept?