sql >> Database >  >> RDS >> Oracle

%ENV werkt niet en ik kan de gedeelde bibliotheek niet gebruiken

De LD_LIBRARY_PATH omgevingsvariabele moet voor worden ingesteld je programma start — vóór perl zelf wordt geladen. Wijzigen in BEGIN{} heeft invloed op nieuwe programma's die u start, maar het heeft geen invloed op het laden van gedeelde bibliotheken — in dit geval (hoewel ik de DBD::Oracle nooit heb gebruikt) laad je een Oracle .so in het reeds lopende programma, dus het is "te laat" om de LD_LIBRARY_PATH te wijzigen . De dynamische linker /lib/ld.so (of zo) is gestart vóór perl , dus tegen de tijd dat uw script is gecompileerd en BEGIN{} wordt uitgevoerd, is het al ingesteld.

Je zou probeer je script opnieuw uit te voeren als zijn eigen opvolger of zoiets*, maar een kort shellscript zal vrijwel zeker de eenvoudigste oplossing zijn:

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

*- dit zou een beetje gek zijn, maar 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. De beste manier om een ​​SET groter dan 64 . op te slaan

  2. SQL Regex-functie die vergelijkbaar is met de MySql REGEX-functie

  3. Oracle uitvoeringsplan

  4. Hoe maak je een index op het JSON-veld in Postgres?