sql >> Databasteknik >  >> RDS >> Oracle

Installation av RODBC/ROracle-paket på OS X Mavericks

Det här svaret kommer att täcka installation av RODBC och ROracle på OS X, specifikt på Mavericks och senare.

Båda paketen måste nu byggas (kompileras) från källkod. Det betyder att det första du behöver är att ladda ner XCode och de tillhörande "kommandoradsverktygen" så att du faktiskt har en kompilator. Hur du gör detta har förändrats med i princip alla versioner av OS X/XCode, men om du börjar Googla kommer du förmodligen att landa här.

När du väl har det på plats...

RODBC

Sedan OS X 10.9 (Mavericks) slutade Apple att inkludera iODBC SQL-huvudfilerna tillsammans med "kommandoradsverktygen" som R-användare på OS X är vana vid att installera för att bygga R-paket från källkod.

Så om du försöker bygga RODBC från källan på Mavericks vid det här laget bör du få ett felmeddelande som:

configure:error:"ODBC-huvuden sql.h och sqlext.h hittades inte"

För att fixa detta måste du ladda ner den senaste versionen av iODBC (www.iodbc.org), och sedan packa upp filen och ställa in din rubrik och bibliotekssökväg till platsen där du placerade det uppackade paketet. Om du inte vet hur du ställer in dina sökvägar kan du bara lägga in rubrikfilerna (sql.h och sqlext.h) i /usr/include katalogen och libiodbc.a filen i /usr/lib katalog.

Då borde du kunna göra

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

utan problem. Förmodligen skulle detta fungera lika bra med det andra stora ODBC-projektet med öppen källkod, unixODBC, men jag har inte provat det.

Jag har testat detta (och hembryggningsmetoden i ett annat svar) på El Capitan och båda fungerar fortfarande.

ROracle

Det här är mer komplicerat. ROracle kan dock installeras på OS X (jag har testat detta på Mountain Lion genom El Capitan). Eftersom ROracle förlitar sig på Oracle Instant Client, finns det inga binärfiler tillgängliga på någon plattform. Det finns detaljerade installationsinstruktioner för paketet här.

För OS X måste vi (för det mesta) följa Linux-instruktionerna.

Ladda först ner lämplig Oracle Instant Client, såväl som SDK, enligt instruktionerna i Linuz-instruktionerna.

Linux-installationsinstruktionerna nämner installation av klienten från en RPM, vilket kommer att placera allt "på rätt plats". Jag kunde inte ta reda på om det ens gällde för OS X, så jag packade helt enkelt upp klienten i en katalog som jag skapade och placerade SDK:n i den katalogen i /sdk .

Linux-installationsinstruktionerna uppmanar oss sedan att skapa en symbolisk länk för libclntsh.so.11.1. Eftersom detta är OS X, heter det faktiskt libclntsh.dylib.11.1. Så vi måste cd till katalogen där vi packade upp klienten och kör sedan

ln -s libclntsh.dylib.11.1 libclntsh.dylib

På OS X ställer vi sedan in DYLD_LIBRARY_PATH , inte LD_LIBRARY_PATH :

export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH

använda den sökväg som är korrekt för din maskin.

Jag kunde aldrig få ROracle att kompilera med en OCI_LIB miljöfaktor. Istället använde jag --with-oci-lib kompilatorflaggaalternativ:

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

igen genom att använda vilken sökväg och ROracle-versionsnummer som är lämpligt.

Om du ansluter till en Oracle-databas med en tnsnames.ora-fil, måste du också ställa in en TNS_ADMIN miljövariabel för att peka på platsen för den filen.

En sista gotcha:du kanske upptäcker (som jag gjorde) att allt detta fungerar bara om du startar Rfrån kommandoraden (dvs Terminal). Specifikt, om du startar antingen RGui.app eller RStudio.app från GUI och sedan försöker köra library(ROracle) du kommer att få ett felmeddelande som säger något till effekten av

> 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’

Detta kommer att hända även om Sys.getenv("DYLD_LIBRARY_PATH") rapporterar troget den korrekta vägen.

Ett tag hackade jag ihop en "lösning" där jag skapade ett skalskript som startade RStudio/RGui vid uppstart, och var bara tvungen att komma ihåg att alltid i efterhand starta dem via

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

Problemet har tydligen att göra med hur miljövariabler görs tillgängliga för GUI-lanserade applikationer i OS X. Som vanligtvis är fallet hittade jag så småningom lösningen på StackOverflow. Redigera /etc/launchd.conf filen löste det här problemet, så ROracle laddas nu även när RStudio/RGuiare startas från Finder. Observera dock här att /etc/launchd.conf lösningen stöds inte längre i Yosemite. Det svaret antyder att du nu behöver konfigurera en start-plist-fil bara för att ställa in miljön för launchctl vid start.

El Capitan-uppdatering för ROracle

Jag har nu gått igenom degeln på den här i El Capitan och den fungerar enligt beskrivningen ovan, men bara om du inaktiverar System Integrity Protection först! Att göra det går ganska snabbt och instruktionerna är lätta att hitta via Google.

Puh.



  1. Hur man konfigurerar AppArmor för PostgreSQL och TimescaleDB

  2. WEEKDAY() vs DAYOFWEEK() i MariaDB:Vad är skillnaden?

  3. MariaDB JSON_MERGE_PRESERVE() Förklarad

  4. Få aktuellt inloggnings-ID i SQL Server (T-SQL)