sql >> Databasteknik >  >> RDS >> Oracle

%ENV fungerar inte och jag kan inte använda delat bibliotek

LD_LIBRARY_PATH miljövariabel måste ställas in före ditt program startar — före perl själv är laddad. Ändra det i BEGIN{} kommer att påverka nya program som du startar, men det påverkar inte laddningen av delade bibliotek — i det här fallet (även om jag aldrig har använt DBD::Oracle) laddar du en Oracle .so i det program som redan körs, så det är "för sent" att ändra LD_LIBRARY_PATH . Den dynamiska länken /lib/ld.so (eller så) startas före perl , så när ditt skript är kompilerat och BEGIN{} körs, den är redan konfigurerad.

Du kunde försök att köra om ditt skript som sin egen efterträdare eller något*, men ett kort skalskript kommer nästan säkert att vara den enklaste lösningen:

  #!/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 här skulle vara lite galet, 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. Hur kan jag mappa en lokal unix-socket till en inet-socket?

  2. Uppdatera flera kolumner i SQL

  3. Ändra en befintlig kolumn till en beräknad kolumn i SQL Server (T-SQL-exempel)

  4. Hur skapar man en fråga i MySQL för att subtrahera på varandra följande rader baserat på datum och ett distinkt fält?