sql >> Base de Datos >  >> RDS >> Oracle

Instalación de paquetes RODBC/ROracle en OS X Mavericks

Esta respuesta cubrirá la instalación de RODBC y ROracle en OS X, específicamente en Mavericks y posteriores.

Ambos paquetes ahora deben construirse (compilarse) desde la fuente. Esto significa que lo primero que necesita es descargar XCode y las "herramientas de línea de comandos" asociadas para que realmente tenga un compilador La forma de hacer esto ha cambiado básicamente con todas las versiones de OS X/XCode, pero si comienza a buscar en Google, probablemente terminará aterrizando aquí.

Una vez que tengas eso en su lugar...

RODBC

Desde OS X 10.9 (Mavericks), Apple dejó de incluir los archivos de encabezado SQL iODBC junto con las "herramientas de línea de comandos" que los usuarios de R en OS X están acostumbrados a instalar para compilar Rpackages desde la fuente.

Entonces, si intenta compilar RODBC desde la fuente en Mavericks en este punto, debería obtener un error como:

configurar:error:"Encabezados ODBC sql.h y sqlext.h no encontrados"

Para solucionar esto, debe descargar la última versión de iODBC (www.iodbc.org) y luego descomprimir el archivo y configurar las rutas de búsqueda de encabezado y biblioteca en la ubicación donde colocó el paquete descomprimido. Si no sabe cómo configurar sus rutas de búsqueda, simplemente puede colocar los archivos de encabezado (sql.h y sqlext.h) en /usr/include directorio, y el libiodbc.a archivo en el /usr/lib directorio.

Entonces deberías poder hacer

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

sin ningún problema. Presumiblemente, esto también funcionaría con el otro gran proyecto ODBC de código abierto, unixODBC, pero no lo he probado.

Probé esto (y el método homebrew en otra respuesta) en El Capitan y ambos aún funcionan.

ROráculo

Esto es más complicado. Sin embargo, ROracle se puede instalar en OS X (lo he probado en Mountain Lion a través de El Capitan). Dado que ROracle se basa en Oracle Instant Client, no hay archivos binarios disponibles para ninguna plataforma. Hay instrucciones de instalación detalladas para el paquete aquí.

Para OS X, necesitamos (principalmente) seguir las instrucciones de Linux.

Primero, descargue el Oracle Instant Client adecuado, así como el SDK, como se indica en las instrucciones de Linuz.

Las instrucciones de instalación de Linux mencionan la instalación del cliente desde un RPM, que colocará todo "en el lugar correcto". No pude averiguar si eso se aplicaba incluso a OS X, así que simplemente descomprimí el cliente en un directorio que creé y coloqué el SDK dentro de ese directorio en /sdk .

Las instrucciones de instalación de Linux luego nos dirigen a crear un enlace simbólico para libclntsh.so.11.1. Como se trata de OS X, en realidad se llama libclntsh.dylib.11.1. Así que necesitamos hacer un cd al directorio donde descomprimimos el cliente y luego ejecutar

ln -s libclntsh.dylib.11.1 libclntsh.dylib

En OS X, luego configuramos el DYLD_LIBRARY_PATH , no el LD_LIBRARY_PATH :

export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH

usando cualquier ruta que sea correcta para su máquina.

Nunca pude hacer que ROracle compilara con un OCI_LIB Variable ambiental. En cambio, usé --with-oci-lib opción de indicador del compilador:

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

nuevamente usando la ruta y el número de versión de ROracle que sea apropiado.

Si se está conectando a una base de datos de Oracle mediante un archivo tnsnames.ora, también deberá configurar una variable de entorno TNS_ADMIN para señalar la ubicación de ese archivo.

Un último problema:puede encontrar (como lo hice yo) que todo esto funcionará solo si inicia R desde la línea de comando (es decir, Terminal). Específicamente, si inicia RGui.app o RStudio.app desde la GUI y luego intenta ejecutar library(ROracle) obtendrá un error al decir algo en el sentido de

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

Esto sucederá aunque Sys.getenv("DYLD_LIBRARY_PATH") informa fielmente la ruta correcta.

Durante un tiempo, compuse una "solución" en la que creaba un script de shell que iniciaba RStudio/RGui al iniciarse, y solo tenía que recordar ejecutarlos posteriormente a través de

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

Aparentemente, el problema tiene que ver con la forma en que las variables de entorno se ponen a disposición de las aplicaciones iniciadas por GUI en OS X. Como suele ser el caso, finalmente encontré la solución en StackOverflow. Editando el /etc/launchd.conf El archivo resolvió este problema, por lo que ROracle ahora se carga incluso cuando se inicia RStudio/RGuiare desde el Finder. Aunque tenga en cuenta aquí que el /etc/launchd.conf Ya no se admite la solución en Yosemite. Esa respuesta sugiere que ahora necesita configurar un archivo plist de inicio solo para configurar el entorno para launchctl al iniciar.

Actualización de El Capitán para ROracle

Ahora he pasado por el crisol de este en El Capitán y funciona como se describe anteriormente, pero solo si desactivas la Protección de integridad del sistema ¡primero! Hacerlo es bastante rápido y las instrucciones se encuentran fácilmente a través de Google.

Uf.