sql >> データベース >  >> RDS >> Oracle

OSXMavericksへのRODBC/ROracleパッケージのインストール

    この回答では、OS X、特にMavericks以降へのRODBCとROracleのインストールについて説明します。

    ここで、両方のパッケージをソースからビルド(コンパイル)する必要があります。つまり、最初に必要なのは、XCodeと関連する「コマンドラインツール」をダウンロードして、実際に使用できるようにすることです。 コンパイラ。これを行う方法は、基本的にOS X / XCodeのすべてのバージョンで変更されていますが、グーグルを開始すると、おそらくここに着陸することになります。

    それが整ったら...

    RODBC

    OS X 10.9(Mavericks)以降、AppleはiODBC SQLヘッダーファイルと、OSXのRユーザーがソースからRpackagesをビルドするためにインストールするのに慣れている「コマンドラインツール」のインクルードを停止しました。

    したがって、この時点でMavericksのソースからRODBCをビルドしようとすると、次のようなエラーが発生するはずです。

    configure:エラー:「ODBCヘッダーsql.hおよびsqlext.hが見つかりません」

    これを修正するには、最新バージョンのiODBC(www.iodbc.org)をダウンロードしてから、ファイルを解凍し、解凍したパッケージを配置した場所にヘッダーとライブラリの検索パスを設定する必要があります。検索パスの設定方法がわからない場合は、ヘッダーファイル(sql.hおよびsqlext.h)を/usr/includeに配置するだけです。 ディレクトリ、およびlibiodbc.a /usr/lib内のファイル ディレクトリ。

    そうすればできるはずです

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

    問題なく。おそらく、これは他の主要なオープンソースODBCプロジェクトであるunixODBCでも同様に機能しますが、私はそれを試していません。

    私はこれ(および別の回答の自作方法)をエルキャピタンでテストしましたが、どちらもまだ機能しています。

    ROracle

    これはもっと複雑です。ただし、ROracleはOS Xにインストールできます(これは、ElCapitanを介してMountainLionでテストしました)。 ROracleはOracleInstantClientに依存しているため、どのプラットフォームでも使用できるバイナリはありません。パッケージの詳細なインストール手順はここにあります。

    OS Xの場合、(ほとんど)Linuxの指示に従う必要があります。

    まず、Linuzの手順に従って、適切なOracleInstantClientとSDKをダウンロードします。

    Linuxのインストール手順には、RPMからクライアントをインストールすることが記載されています。これにより、すべてが「適切な場所」に配置されます。それがOSXにも当てはまるかどうかわからなかったので、作成したディレクトリでクライアントを解凍し、そのディレクトリ内の/sdkにSDKを配置しました。 。

    次に、Linuxのインストール手順で、libclntsh.so.11.1のシンボリックリンクを作成するように指示されます。これはOSXであるため、実際にはlibclntsh.dylib.11.1と呼ばれます。したがって、クライアントを解凍して実行するディレクトリにcdする必要があります

    ln -s libclntsh.dylib.11.1 libclntsh.dylib
    

    OS Xでは、DYLD_LIBRARY_PATHを設定します。 、LD_LIBRARY_PATHではありません :

    export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH
    

    マシンに適したパスを使用します。

    ROracleをOCI_LIBでコンパイルすることができませんでした 環境変数。代わりに、--with-oci-libを使用しました コンパイラフラグオプション:

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

    ここでも、適切なパスとROracleバージョン番号を使用します。

    tnsnames.oraファイルを使用してOracleデータベースに接続している場合は、そのファイルの場所を指すようにTNS_ADMIN環境変数も設定する必要があります。

    最後の落とし穴:コマンドライン(ターミナルなど)からRを起動した場合にのみ、これがすべて機能することがわかります(私が行ったように)。具体的には、GUIからRGui.appまたはRStudio.appのいずれかを起動してから、library(ROracle)を実行しようとした場合 何かの効果を誤解することになります

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

    これは、Sys.getenv("DYLD_LIBRARY_PATH")でも発生します 正しいパスを忠実に報告します。

    しばらくの間、起動時にRStudio / RGuiを起動するシェルスクリプトを作成する「ソリューション」を一緒にハックしましたが、その後は常に

    を介して起動することを忘れないでください。
    open -a R.app
    open -a RStudio.app
    

    問題は明らかに、OS XでGUIで起動されたアプリケーションで環境変数を利用できるようにする方法に関係しています。通常の場合と同様に、私は最終的にStackOverflowで解決策を見つけました。 /etc/launchd.confを編集する ファイルがこの問題を解決したため、FinderからRStudio/RGuiareを起動した場合でもROracleがロードされるようになりました。ただし、ここで/etc/launchd.confに注意してください。 Yosemiteではソリューションはサポートされなくなりました。その答えは、launchctlの環境を設定するためだけに、起動plistファイルを設定する必要があることを示唆しています。 起動時。

    ROracle用のElCapitanアップデート

    これでエルキャピタンのるつぼを調べましたが、上記のように機能しますが、システム整合性保護を無効にする場合に限ります。 最初!これを行うのはかなり迅速で、手順はGoogleから簡単に見つけることができます。

    ふぅ。



    1. pgadminを使用してherokuデータベースに接続します

    2. HerokuでPostgresDBを破棄する

    3. SQL Server:同等のテーブルカスケードを削除しますか?

    4. ORA-03113:通信チャネルのファイルの終わり