プライマリ・コンテンツに移動
Oracle® R Enterpriseインストレーションおよび管理ガイド
リリース1.5.1
E88294-01
目次へ移動
目次
索引へ移動
索引

前
次

2.2 埋込みRの実行用のEXTPROCの構成

外部プロシージャは、異なる言語で書かれたプログラムから起動されるプロシージャです。Oracle Databaseでは、外部プロシージャをサポートするためにextprocという外部プロシージャ・エージェントが使用されます。Oracle R Enterpriseでは、埋込みRの実行をサポートするためにextprocが使用されます。

2.2.1 EXTPROCについて

アプリケーションから外部プロシージャが起動されると、Oracle Databaseによってextprocエージェントが起動されます。アプリケーションからは、Oracle Databaseによって確立されたネットワーク接続を使用して、プロシージャを実行するための指示がエージェントに送られます。エージェントでは、DLLや共有ライブラリがロードされ、外部プロシージャが実行され、外部プロシージャから戻された値がアプリケーションに戻されます。

2.2.2 Oracle R EnterpriseのEXTPROC構成について

Oracle R Enterpriseでは、extprocのデフォルト構成が使用されます。

extprocエージェントはOracle Databaseによって直接生成され、listener.oratnsnames.oraも構成を変更する必要はありません。extprocをデータベース・リスナーに構成すると、デフォルト設定がオーバーライドされます。

デフォルトでは、extprocによってあらゆる外部プロシージャの呼出しがサポートされています。Oracle R Enterprise用の外部プロシージャの呼出しのみを許可する場合は、ORACLE_HOME/hs/admin/extproc.oraEXTPROC_DLLS環境変数を編集します。

LinuxまたはUNIXシステムでは、次の文によってOracle R Enterprise用の外部プロシージャのみが実行されるようにEXTPROC_DLLSが設定されます。

SET EXTPROC_DLLS=ONLY:$ORACLE_HOME/lib/ore.so

extprocにあらゆる外部プロシージャの処理を許可するには、EXTPROC_DLLSANYに設定するか、または単に空白のまま(デフォルト)にします。

R-3.3.0以降では、Linux 6の場合、$ORACLE_HOME/hs/admin/extproc.oraLD_LIBRARY_PATHをR-core-extra RPMの場所に設定する必要があります。これにより、これらのライブラリは、extprocを実行中のOracleプロセスに検出されます。例えば、R-core-extra RPMのデフォルトの場所は/usr/lib64/R/port/Linux-X64/libです。そこでのextproc.oraエントリは次のとおりです。

SET LD_LIBRARY_PATH=/usr/lib64/R/port/Linux-X64/lib

Linux 7では、LD_LIBRARY_PATHを設定する必要はありません。これらのライブラリの必要なバージョンがLinux 7のシステムのネイティブであるためです。

注意:

extproc.oraの変更を有効にするには、データベースの再起動が必要です。

関連項目:

詳細は、『Oracle Database Net Services管理者ガイド』の外部プロシージャのデフォルト構成に関する説明を参照してください。

2.2.3 EXTPROCのトラブルシューティング

データベース構成に問題が存在する場合、Oracle R Enterprise埋込みR関数のコールでエラーが発生します。

Oracle R Enterprise埋込みR関数のコールの試みで、次のエラーが発生した場合、外部プロシージャが成功していません。。

ORA-28575: unable to open RPC connection to external procedure agent.

このエラーは、データベース構成の問題で発生することがよくあります。この原因として、次のいずれかが考えられます。

  • Oracle R EnterpriseユーザーにRQADMINロールが付与されていません。

  • Oracleリスナーが実行されていません。

  • Oracleリスナー構成が正しくありません。デフォルトの外部プロシージャ構成(使用をお薦めします)を使用しない場合に発生します。

  • ネットワーク層の制限または問題が存在します。

  • 外部プロシージャの制限が強制的にコールされました。