sql >> Database teknologi >  >> RDS >> Oracle

Installation af RODBC/ROracle-pakker på OS X Mavericks

Dette svar vil dække installation af RODBC og RORacle på OS X, specifikt på Mavericks og senere.

Begge pakker skal nu bygges (kompileres) fra kilden. Det betyder, at det første du skal bruge er at downloade XCode og de tilhørende "kommandolinjeværktøjer", så du faktisk har en compiler. Hvordan du gør dette har ændret sig med stort set alle versioner af OS X/XCode, men hvis du begynder at google, ender du sandsynligvis med at lande her.

Når du har det på plads...

RODBC

Siden OS X 10.9 (Mavericks) stoppede Apple med at inkludere iODBC SQL-headerfilerne sammen med "kommandolinjeværktøjerne", som R-brugere på OS X er vant til at installere for at bygge R-pakker fra kilden.

Så hvis du prøver at bygge RODBC fra kilden på Mavericks på dette tidspunkt, skulle du få en fejl som:

configure:error:"ODBC headers sql.h og sqlext.h ikke fundet"

For at løse dette skal du downloade den seneste version af iODBC (www.iodbc.org), og derefter udpakke filen og indstille din header og bibliotekssøgesti til det sted, hvor du placerede den udpakkede pakke. Hvis du ikke ved, hvordan du indstiller dine søgestier, kan du bare placere header-filerne (sql.h og sqlext.h) i /usr/include biblioteket og libiodbc.a fil i /usr/lib bibliotek.

Så burde du være i stand til at gøre

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

uden problemer. Det ville formentlig også fungere med det andet store open source ODBC-projekt, unixODBC, men det har jeg ikke prøvet.

Jeg har testet dette (og homebrew-metoden i et andet svar) på El Capitan og begge virker stadig.

ROracle

Dette er mere kompliceret. ROracle kan dog installeres på OS X (jeg har testet dette på Mountain Lion gennem El Capitan). Da RORacle er afhængig af Oracle Instant Client, er der ingen binære filer tilgængelige på nogen platform. Der er detaljerede installationsvejledninger til pakken her.

For OS X skal vi (for det meste) følge Linux-instruktionerne.

Først skal du downloade den relevante Oracle Instant Client samt SDK'et som anvist i Linuz-instruktionerne.

Linux installationsinstruktionerne nævner installation af klienten fra en RPM, som vil placere alt "på det rigtige sted". Jeg var ikke i stand til at finde ud af, om det overhovedet gjaldt for OS X, så jeg pakkede simpelthen klienten ud i en mappe, jeg oprettede, og placerede SDK'et inde i den mappe i /sdk .

Linux installationsinstruktionerne beder os derefter om at oprette et symbolsk link til libclntsh.so.11.1. Da dette er OS X, hedder det faktisk libclntsh.dylib.11.1. Så vi er nødt til at cd til den mappe, hvor vi pakkede klienten ud og derefter køre

ln -s libclntsh.dylib.11.1 libclntsh.dylib

På OS X indstiller vi derefter DYLD_LIBRARY_PATH , ikke LD_LIBRARY_PATH :

export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH

ved at bruge den sti, der er korrekt for din maskine.

Jeg var aldrig i stand til at få ROracle til at kompilere med en OCI_LIB miljøvariabel. I stedet brugte jeg --with-oci-lib compiler flag mulighed:

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

igen ved at bruge den sti og ROracle-versionsnummer, der er passende.

Hvis du opretter forbindelse til en Oracle-database ved hjælp af en tnsnames.ora-fil, skal du også indstille en TNS_ADMIN-miljøvariabel til at pege på placeringen af ​​denne fil.

En sidste fikcha:du kan finde ud af (som jeg gjorde), at alt dette kun vil fungere, hvis du starter R fra kommandolinjen (dvs. Terminal). Specifikt, hvis du starter enten RGui.app eller RStudio.app fra GUI'en og derefter prøver at køre library(ROracle) du vil få en fejl, der siger noget til effekten af

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

Dette vil ske selvom Sys.getenv("DYLD_LIBRARY_PATH") rapporterer trofast den rigtige vej.

I et stykke tid hakkede jeg en "løsning" sammen, hvor jeg lavede et shell-script, der lancerede RStudio/RGui ved opstart, og lige skulle huske at altid efterfølgende starte dem via

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

Problemet har tilsyneladende at gøre med, hvordan miljøvariabler gøres tilgængelige for GUI-lancerede applikationer i OS X. Som det normalt er tilfældet, fandt jeg til sidst løsningen på StackOverflow. Redigering af /etc/launchd.conf fil løste dette problem, så ROracle nu indlæses, selv når RStudio/RGuiare blev startet fra Finder. Bemærk dog her, at /etc/launchd.conf løsning er ikke længere understøttet i Yosemite. Det svar antyder, at du nu skal konfigurere en opstartsplist-fil bare for at indstille miljøet til launchctl ved opstart.

El Capitan-opdatering til RORacle

Jeg har nu gennemgået diglen på denne i El Capitan, og den fungerer som beskrevet ovenfor, men kun hvis du deaktiverer System Integrity Protection først! Det er ret hurtigt at gøre det, og instruktioner kan nemt findes via Google.

Pyha.



  1. SQL Server 2017 Management Tools

  2. Java JDBC - Sådan opretter du forbindelse til Oracle ved hjælp af tnsnames.ora

  3. MySQL-replikering for høj tilgængelighed

  4. oracle-databaseforbindelse i web.config asp.net