Oracle
 sql >> Base de données >  >> RDS >> Oracle

Installation des packages RODBC/ROracle sur OS X Mavericks

Cette réponse couvrira l'installation de RODBC et ROracle sur OS X, en particulier sur Mavericks et versions ultérieures.

Les deux packages doivent maintenant être construits (compilés) à partir des sources. Cela signifie que la première chose dont vous avez besoin est de télécharger XCode et les "outils de ligne de commande" associés afin que vous ayez un compilateur. La façon dont vous faites cela a changé avec pratiquement toutes les versions d'OS X/XCode, mais si vous commencez à googler, vous finirez probablement par atterrir ici.

Une fois que vous avez cela en place...

RODBC

Depuis OS X 10.9 (Mavericks), Apple a cessé d'inclure les fichiers d'en-tête SQL iODBC avec les "outils de ligne de commande" que les utilisateurs de R sous OS X sont habitués à installer afin de créer des Rpackages à partir de la source.

Donc, si vous essayez de construire RODBC à partir de la source sur Mavericks à ce stade, vous devriez obtenir une erreur comme :

configure :erreur :"Les en-têtes ODBC sql.h et sqlext.h sont introuvables"

Pour résoudre ce problème, vous devez télécharger la dernière version d'iODBC (www.iodbc.org), puis décompressez le fichier et définissez vos chemins de recherche d'en-tête et de bibliothèque à l'emplacement où vous placez le package décompressé. Si vous ne savez pas comment définir vos chemins de recherche, vous pouvez simplement mettre les fichiers d'en-tête (sql.h et sqlext.h) dans le /usr/include répertoire et le libiodbc.a fichier dans le /usr/lib répertoire.

Ensuite, vous devriez pouvoir faire

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

sans aucun problème. Vraisemblablement, cela fonctionnerait aussi avec l'autre grand projet ODBC open source, unixODBC, mais je n'ai pas essayé.

J'ai testé cela (et la méthode homebrew dans une autre réponse) sur El Capitan et les deux fonctionnent toujours.

ROracle

C'est plus compliqué. Cependant, ROracle peut être installé sur OS X (je l'ai testé sur Mountain Lion via El Capitan). Étant donné que ROracle s'appuie sur Oracle Instant Client, aucun fichier binaire n'est disponible pour aucune plate-forme. Vous trouverez ici des instructions d'installation détaillées pour le package.

Pour OS X, nous devons (principalement) suivre les instructions de Linux.

Tout d'abord, téléchargez le client Oracle Instant approprié, ainsi que le SDK, comme indiqué dans les instructions de Linuz.

Les instructions d'installation de Linux mentionnent l'installation du client à partir d'un RPM, ce qui placera tout "au bon endroit". Je n'ai pas pu déterminer si cela s'appliquait même à OS X, j'ai donc simplement décompressé le client dans un répertoire que j'ai créé et placé le SDK dans ce répertoire dans /sdk .

Les instructions d'installation de Linux nous invitent ensuite à créer un lien symbolique pour libclntsh.so.11.1. Comme il s'agit d'OS X, il s'appelle en fait libclntsh.dylib.11.1. Nous devons donc accéder au répertoire dans lequel nous avons décompressé le client, puis exécuter

ln -s libclntsh.dylib.11.1 libclntsh.dylib

Sur OS X, nous définissons ensuite le DYLD_LIBRARY_PATH , pas le LD_LIBRARY_PATH :

export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH

en utilisant le chemin correct pour votre machine.

Je n'ai jamais réussi à faire compiler ROracle avec un OCI_LIB variables d'environnement. Au lieu de cela, j'ai utilisé le --with-oci-lib option d'indicateur de compilateur :

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

à nouveau en utilisant le chemin et le numéro de version ROracle appropriés.

Si vous vous connectez à une base de données Oracle à l'aide d'un fichier tnsnames.ora, vous devrez également définir une variable d'environnement TNS_ADMIN pour pointer vers l'emplacement de ce fichier.

Un dernier piège :vous constaterez peut-être (comme moi) que tout cela ne fonctionnera que si vous lancez Rà partir de la ligne de commande (c'est-à-dire Terminal). Plus précisément, si vous lancez RGui.app ou RStudio.app à partir de l'interface graphique, puis essayez d'exécuter library(ROracle) vous obtiendrez une erreur en disant quelque chose à l'effet 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’

Cela se produira même si Sys.getenv("DYLD_LIBRARY_PATH") rapporte fidèlement le chemin correct.

Pendant un moment, j'ai piraté ensemble une "solution" où j'ai créé un script shell qui lançait RStudio/RGui au démarrage, et je devais juste me rappeler de toujours les lancer ensuite via

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

Le problème a apparemment à voir avec la façon dont les variables d'environnement sont rendues disponibles pour les applications lancées par l'interface graphique sous OS X. Comme c'est généralement le cas, j'ai finalement trouvé la solution sur StackOverflow. Modification du /etc/launchd.conf Le fichier a résolu ce problème, donc ROracle se charge désormais même lorsque RStudio/RGuiare est lancé à partir du Finder. Notez cependant ici que le /etc/launchd.conf La solution n'est plus prise en charge dans Yosemite. Cette réponse suggère que vous devez maintenant configurer un fichier plist de démarrage juste pour définir l'environnement pour launchctl au démarrage.

Mise à jour El Capitan pour ROracle

J'ai maintenant parcouru le creuset sur celui-ci à El Capitan et cela fonctionne comme décrit ci-dessus, mais uniquement si vous désactivez la protection de l'intégrité du système première! Cela est assez rapide et les instructions sont faciles à trouver via Google.

Ouf.