sql >> Database >  >> RDS >> Oracle

Installatie van RODBC/ROracle-pakketten op OS X Mavericks

Dit antwoord gaat over het installeren van RODBC en ROracle op OS X, met name op Mavericks en hoger.

Beide pakketten moeten nu vanuit de broncode worden gebouwd (gecompileerd). Dit betekent dat u eerst XCode en de bijbehorende "command line tools" moet downloaden, zodat u daadwerkelijk heeft een compiler. De manier waarop u dit doet, is met vrijwel elke versie van OS X/XCode veranderd, maar als u begint te Googlen, komt u waarschijnlijk hier terecht.

Als je dat eenmaal op zijn plaats hebt...

RODBC

Sinds OS X 10.9 (Mavericks) is Apple gestopt met het opnemen van de iODBC SQL-headerbestanden samen met de "opdrachtregeltools" die R-gebruikers op OS X gewend zijn te installeren om R-pakketten vanaf de bron te bouwen.

Dus als je RODBC vanaf de broncode op Mavericks probeert te bouwen, zou je een foutmelding moeten krijgen zoals:

configure:error:"ODBC-headers sql.h en sqlext.h niet gevonden"

Om dit op te lossen, moet je de nieuwste versie van iODBC (www.iodbc.org) downloaden, het bestand uitpakken en je header en bibliotheekzoekpaden instellen op de locatie waar je het uitgepakte pakket hebt geplaatst. Als u niet weet hoe u uw zoekpaden moet instellen, kunt u de headerbestanden (sql.h en sqlext.h) gewoon in de /usr/include plaatsen directory,en de libiodbc.a bestand in de /usr/lib directory.

Dan zou je moeten kunnen doen

install.packages("RODBC",type = "source")

zonder enig probleem. Vermoedelijk zou dit ook werken met het andere grote open source ODBC-project, unixODBC, maar dat heb ik niet geprobeerd.

Ik heb dit (en de homebrew-methode in een ander antwoord) getest op El Capitan en beide werken nog steeds.

ROrakel

Dit is ingewikkelder. ROracle kan echter op OS X worden geïnstalleerd (ik heb dit getest op Mountain Lion via El Capitan). Aangezien ROracle afhankelijk is van de Oracle Instant Client, zijn er voor geen enkel platform binaire bestanden beschikbaar. Hier vindt u gedetailleerde installatie-instructies voor het pakket.

Voor OS X moeten we (meestal) de Linux-instructies volgen.

Download eerst de juiste Oracle Instant Client, evenals de SDK, zoals aangegeven in de Linuz-instructies.

De Linux-installatie-instructies vermelden het installeren van de client vanaf een RPM, waardoor alles "op de juiste plaats" wordt geplaatst. Ik kon niet achterhalen of dat zelfs van toepassing was op OS X, dus ik heb de client eenvoudig uitgepakt in een map die ik heb gemaakt en de SDK in die map geplaatst in /sdk .

De Linux-installatie-instructies geven ons de opdracht om een ​​symbolische link te maken voor libclntsh.so.11.1. Aangezien dit OS X is, heet het eigenlijk libclntsh.dylib.11.1. Dus we moeten cd naar de map waarin we de client hebben uitgepakt en dan uitvoeren

ln -s libclntsh.dylib.11.1 libclntsh.dylib

Op OS X stellen we vervolgens de DYLD_LIBRARY_PATH , niet de LD_LIBRARY_PATH :

export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH

gebruik het pad dat correct is voor uw machine.

Ik heb ROracle nooit kunnen compileren met een OCI_LIB omgevingsvariabele. In plaats daarvan gebruikte ik de --with-oci-lib optie voor compilervlag:

R CMD INSTALL --configure-args='--with-oci-lib=/scratch/instantclient_11_2' ROracle_1.1-11.tar.gz

opnieuw met het pad en het ROracle-versienummer dat geschikt is.

Als u verbinding maakt met een Oracle-database met behulp van een tnsnames.ora-bestand, moet u ook een omgevingsvariabele TNS_ADMIN instellen om naar de locatie van dat bestand te verwijzen.

Nog een laatste probleem:je zult misschien merken (zoals ik deed) dat dit allemaal alleen werkt als je R start vanaf de opdrachtregel (d.w.z. Terminal). Met name als u RGui.app ofRStudio.app start vanuit de GUI en vervolgens probeert library(ROracle) uit te voeren je krijgt een fout als je iets zegt in de trant van

> library("ROracle")
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so, 6): Library not loaded: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
  Referenced from: /Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so
  Reason: image not found
Error: package or namespace load failed for ‘ROracle’

Dit gebeurt zelfs als Sys.getenv("DYLD_LIBRARY_PATH") rapporteert getrouw het juiste pad.

Ik heb een tijdje een "oplossing" gehackt waarbij ik een shellscript heb gemaakt dat RStudio/RGui startte bij het opstarten, en ik moest onthouden dat ik ze altijd daarna moest starten via

open -a R.app
open -a RStudio.app

Het probleem heeft blijkbaar te maken met de manier waarop omgevingsvariabelen beschikbaar worden gemaakt voor door de GUI gestarte applicaties in OS X. Zoals meestal het geval is, vond ik de oplossing uiteindelijk op StackOverflow. De/etc/launchd.conf . bewerken -bestand loste dit probleem op, dus ROracle laadt nu zelfs wanneer RStudio/RGuiare wordt gestart vanuit de Finder. Merk hier echter op dat de /etc/launchd.conf oplossing wordt niet langer ondersteund in Yosemite. Dat antwoord suggereert dat je nu een opstart-plist-bestand moet opzetten om de omgeving in te stellen voor launchctl bij opstarten.

El Capitan-update voor ROracle

Ik ben nu door de smeltkroes van deze in El Capitan gegaan en het werkt zoals hierboven beschreven, maar alleen als je Systeemintegriteitsbescherming uitschakelt eerst! Dat gaat vrij snel en instructies zijn gemakkelijk te vinden via Google.

Pff.



  1. TIMESTAMP() Voorbeelden – MySQL

  2. Zorg ervoor dat PostgreSQL soms een slecht queryplan kiest

  3. Oude stijl Oracle Outer Join-syntaxis - Waarom de (+) aan de rechterkant van het isgelijkteken plaatsen in een Left Outer join?

  4. 2ndQuadrant Deutschland – Special Training Opening Koopje