Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Installation von RODBC/ROracle-Paketen auf OS X Mavericks

Diese Antwort behandelt die Installation von RODBC und ROracle auf OS X, insbesondere auf Mavericks und höher.

Beide Pakete müssen nun aus den Quellen gebaut (kompiliert) werden. Das bedeutet, dass Sie als Erstes XCode und die zugehörigen "Befehlszeilen-Tools" herunterladen müssen, damit Sie sie tatsächlich haben ein Compiler. Wie Sie dies tun, hat sich im Grunde mit jeder Version von OS X/XCode geändert, aber wenn Sie anfangen zu googeln, landen Sie wahrscheinlich hier.

Sobald Sie das eingerichtet haben...

RODBC

Seit OS X 10.9 (Mavericks) hat Apple aufgehört, die iODBC-SQL-Header-Dateien zusammen mit den "Befehlszeilen-Tools" einzuschließen, die R-Benutzer unter OS X zu installieren gewohnt sind, um R-Pakete aus dem Quellcode zu erstellen.

Wenn Sie also an dieser Stelle versuchen, RODBC aus dem Quellcode auf Mavericks zu erstellen, sollten Sie eine Fehlermeldung wie die folgende erhalten:

konfigurieren:Fehler:"ODBC-Header sql.h und sqlext.h nicht gefunden"

Um dies zu beheben, müssen Sie die neueste Version von iODBC (www.iodbc.org) herunterladen und dann die Datei entpacken und Ihre Header- und Bibliothekssuchpfade auf den Speicherort setzen, an dem Sie das entpackte Paket abgelegt haben. Wenn Sie nicht wissen, wie Sie Ihre Suchpfade festlegen, können Sie einfach die Header-Dateien (sql.h und sqlext.h) in /usr/include einfügen Verzeichnis und die libiodbc.a Datei im Verzeichnis /usr/lib Verzeichnis.

Dann solltest du in der Lage sein

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

ohne Probleme. Vermutlich würde dies auch mit dem anderen großen Open-Source-ODBC-Projekt, unixODBC, funktionieren, aber ich habe das nicht versucht.

Ich habe dies (und die Homebrew-Methode in einer anderen Antwort) auf El Capitan getestet und beide funktionieren immer noch.

ROrakel

Das ist komplizierter. ROracle kann jedoch auf OS X installiert werden (ich habe dies auf Mountain Lion bis El Capitan getestet). Da ROracle auf den Oracle Instant Client angewiesen ist, sind für keine Plattform Binärdateien verfügbar. Eine ausführliche Installationsanleitung für das Paket finden Sie hier.

Für OS X müssen wir (meistens) den Linux-Anweisungen folgen.

Laden Sie zunächst den entsprechenden Oracle Instant Client sowie das SDK herunter, wie in den Linuz-Anweisungen beschrieben.

Die Linux-Installationsanweisungen erwähnen die Installation des Clients von einem RPM, das alles "an der richtigen Stelle" platziert. Ich konnte nicht herausfinden, ob das überhaupt für OS X gilt, also habe ich den Client einfach in ein von mir erstelltes Verzeichnis entpackt und das SDK in diesem Verzeichnis unter /sdk abgelegt .

Die Linux-Installationsanweisungen weisen uns dann an, einen symbolischen Link für libclntsh.so.11.1 zu erstellen. Da dies OS X ist, heißt es eigentlich libclntsh.dylib.11.1. Also müssen wir in das Verzeichnis wechseln, in dem wir den Client entpackt haben, und dann ausführen

ln -s libclntsh.dylib.11.1 libclntsh.dylib

Unter OS X setzen wir dann den DYLD_LIBRARY_PATH , nicht der LD_LIBRARY_PATH :

export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH

Verwenden Sie den Pfad, der für Ihren Computer richtig ist.

Ich konnte ROracle nie dazu bringen, mit einem OCI_LIB zu kompilieren Umgebungsvariable. Stattdessen habe ich den --with-oci-lib verwendet Compiler-Flag-Option:

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

Verwenden Sie erneut den Pfad und die ROracle-Versionsnummer, die angemessen sind.

Wenn Sie mit einer tnsnames.ora-Datei eine Verbindung zu einer Oracle-Datenbank herstellen, müssen Sie auch eine TNS_ADMIN-Umgebungsvariable so einstellen, dass sie auf den Speicherort dieser Datei verweist.

Ein letzter Fallstrick:Möglicherweise stellen Sie (wie ich) fest, dass dies alles nur funktioniert, wenn Sie R über die Befehlszeile (d. H. Terminal) starten. Insbesondere, wenn Sie entweder RGui.app oder RStudio.app über die GUI starten und dann versuchen, library(ROracle) auszuführen Sie erhalten eine Fehlermeldung, wenn Sie etwas im Sinne von

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

Dies wird passieren, obwohl Sys.getenv("DYLD_LIBRARY_PATH") meldet getreulich den richtigen Pfad.

Für eine Weile habe ich eine "Lösung" zusammengehackt, bei der ich ein Shell-Skript erstellt habe, das RStudio/RGui beim Start gestartet hat und nur daran denken musste, sie anschließend immer über

zu starten
open -a R.app
open -a RStudio.app

Das Problem hat anscheinend damit zu tun, wie Umgebungsvariablen für GUI-gestartete Anwendungen in OS X verfügbar gemacht werden. Wie es normalerweise der Fall ist, fand ich schließlich die Lösung auf StackOverflow. Bearbeiten der /etc/launchd.conf file hat dieses Problem gelöst, sodass ROracle jetzt auch dann geladen wird, wenn RStudio/RGuiare aus dem Finder gestartet werden. Beachten Sie hier jedoch, dass die Datei /etc/launchd.conf Lösung wird in Yosemite nicht mehr unterstützt. Diese Antwort legt nahe, dass Sie jetzt eine Start-PLIST-Datei einrichten müssen, nur um die Umgebung für launchctl festzulegen beim Start.

El Capitan-Update für ROracle

Ich bin jetzt in El Capitan durch den Schmelztiegel gegangen und es funktioniert wie oben beschrieben, aber nur, wenn Sie den Systemintegritätsschutz deaktivieren Erste! Das geht ziemlich schnell und die Anleitungen sind leicht über Google zu finden.

Puh.