sql >> Databáze >  >> RDS >> Oracle

Instalace balíčků RODBC/ROracle na OS X Mavericks

Tato odpověď se bude týkat instalace RODBC a ROracle na OS X, konkrétně na Mavericks a novější.

Oba balíčky je nyní potřeba sestavit (zkompilovat) ze zdroje. To znamená, že první věc, kterou potřebujete, je stáhnout XCode a související „nástroje příkazového řádku“, abyste skutečně měli kompilátor. Způsob, jakým to uděláte, se změnil v podstatě s každou verzí OS X/XCode, ale pokud začnete hledat na Googlu, pravděpodobně skončíte zde.

Jakmile to budete mít na svém místě...

RODBC

Od OS X 10.9 (Mavericks) Apple přestal zahrnovat hlavičkové soubory iODBC SQL spolu s "nástroji příkazového řádku", které jsou uživatelé R v OS X zvyklí instalovat za účelem sestavování Rpackages ze zdroje.

Takže pokud se v tomto okamžiku pokusíte sestavit RODBC ze zdroje na Mavericks, měli byste dostat chybu jako:

configure:error:"Záhlaví ODBC sql.h a sqlext.h nenalezeno"

Chcete-li to vyřešit, musíte si stáhnout nejnovější verzi iODBC (www.iodbc.org) a poté soubor rozbalit a nastavit cestu pro vyhledávání záhlaví a knihovny do umístění, kam jste vložili rozbalený balíček. Pokud nevíte, jak nastavit své vyhledávací cesty, můžete jednoduše umístit hlavičkové soubory (sql.h a sqlext.h) do /usr/include adresář a libiodbc.a soubor v /usr/lib adresář.

Pak byste to měli umět

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

bez problémů. Pravděpodobně by to fungovalo také s dalším velkým open source ODBC projektem, unixODBC, také, ale nezkoušel jsem to.

Testoval jsem to (a metodu homebrew v jiné odpovědi) na El Capitan a oba stále fungují.

ROracle

To je složitější. ROracle však lze nainstalovat na OS X (testoval jsem to na Mountain Lion přes El Capitan). Protože ROracle spoléhá na Oracle Instant Client, nejsou pro žádnou platformu dostupné žádné binární soubory. Zde jsou podrobné pokyny k instalaci balíčku.

U OS X se musíme (většinou) řídit pokyny pro Linux.

Nejprve si stáhněte příslušného klienta Oracle Instant Client a také sadu SDK, jak je uvedeno v pokynech pro Linuz.

Pokyny k instalaci Linuxu zmiňují instalaci klienta z RPM, která umístí vše "na správné místo". Nebyl jsem schopen zjistit, zda to platí i pro OS X, takže jsem jednoduše rozbalil klienta v adresáři, který jsem vytvořil, a umístil SDK do tohoto adresáře v /sdk .

Pokyny k instalaci Linuxu nás pak nasměrují k vytvoření symbolického odkazu na libclntsh.so.11.1. Protože se jedná o OS X, ve skutečnosti se jmenuje libclntsh.dylib.11.1. Potřebujeme tedy cd do adresáře, kde jsme klienta rozbalili, a poté spustit

ln -s libclntsh.dylib.11.1 libclntsh.dylib

Na OS X pak nastavíme DYLD_LIBRARY_PATH , nikoli LD_LIBRARY_PATH :

export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH

pomocí jakékoli cesty, která je pro váš počítač správná.

Nikdy se mi nepodařilo přimět ROracle ke kompilaci s OCI_LIB proměnná prostředí. Místo toho jsem použil --with-oci-lib možnost příznaku kompilátoru:

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

znovu s použitím jakékoli cesty a čísla verze ROracle, která je vhodná.

Pokud se připojujete k databázi Oracle pomocí souboru tnsnames.ora, budete také muset nastavit proměnnou prostředí TNS_ADMIN tak, aby ukazovala na umístění tohoto souboru.

Ještě jedna chyba:můžete zjistit (jako já), že to všechno bude fungovat, pouze pokud spustíte R z příkazového řádku (tj. Terminálu). Konkrétně, pokud spustíte buď RGui.app neboRStudio.app z GUI a poté se pokusíte spustit library(ROracle) dostanete chybu, když řeknete něco ve smyslu

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

K tomu dojde, i když Sys.getenv("DYLD_LIBRARY_PATH") věrně hlásí správnou cestu.

Chvíli jsem hackoval „řešení“, kde jsem vytvořil skript shellu, který po spuštění spustil RStudio/RGui a musel jsem si pamatovat, že je vždy následně spouštět přes

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

Problém zřejmě souvisí s tím, jak jsou proměnné prostředí zpřístupňovány aplikacím spouštěným GUI v OS X. Jak už to tak bývá, nakonec jsem řešení našel na StackOverflow. Úprava souboru /etc/launchd.conf soubor tento problém vyřešil, takže ROracle se nyní načítá, i když je RStudio/RGuiare spuštěno z Finderu. Zde si však všimněte, že /etc/launchd.conf řešení již není v Yosemite podporováno. Tato odpověď naznačuje, že nyní musíte nastavit spouštěcí soubor plist, abyste nastavili prostředí pro launchctl při spuštění.

Aktualizace El Capitan pro ROracle

Nyní jsem prošel kelímek na tomto v El Capitan a funguje to, jak je popsáno výše, ale pouze pokud deaktivujete ochranu integrity systému za prvé! Je to poměrně rychlé a pokyny lze snadno najít na Googlu.

Fuj.



  1. Maze ladění výkonu

  2. Náhodně odebraná postgres výchozí oprávnění superuživatele - mohu je získat zpět?

  3. Transformace funkčnosti třídy Wrapper

  4. Rekurzivní dotaz na SQL Server