SQL を使用してジオデータベースにアクセスするための Oracle extproc の構成

ST_Geometry と ST_Raster を使用する Oracle の SQL 関数は、Oracle の外部プロシージャ エージェントである extproc を介してアクセスされる共有ライブラリを使用します。ST_Geometry または ST_Raster を含む SQL を使用したり、GDB_ITEMS_VW および GDB_ITEMRELATIONSHIPS_VW ビュー内の ArcSDE XML 列にアクセスするには、Oracle がこれらの共有ライブラリにアクセスできるようにする必要があります。したがって、ライブラリは Oracle サーバ上に存在している必要があり、これらのライブラリを Oracle の外部プロシージャ フレームワークを通して呼び出す必要があります。

Oracle リスナーを設定しなくても、ArcGIS で ST_Geometry と ST_Raster を使用することは可能です。ただし、ArcGIS クライアントの一部の機能と、SQL クライアントの機能すべて(SQL*Plus など)が使用できなくなります。たとえば、Oracle リスナーが構成されていない場合、ArcMap のクエリ レイヤの ST_Geometry 列で SQL 関数を使用したり、ST_Raster 列を含むバージョン テーブルを使用したり、ST_Raster 列を含む行を削除したり、SQL クライアントから SQL 関数を実行することはできません。また、Oracle リスナーを構成していない場合は、ST_Geometry タイプを使用するデータを Spatial Data Server にフィーチャ サービスとして公開することはできません。

ST_Raster のインストールは任意です。手順については、「Oracle での ST_Raster タイプのインストール」をご参照ください。

注意注意:

Oracle データベースが Windows サーバにインストールされていて、ArcSDE アプリケーション サーバをインストールしていない場合は、Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ(x64)のインストールが必要になります。Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ(x64)が Oracle サーバにない場合は、Microsoft のサイトからダウンロードしてインストールしてください。

Oracle 11g を使用している場合は extproc.ora ファイルを編集して、Oracle の外部プロシージャ フレームワークを通して関数を呼び出すようにします。Oracle 10g を使用している場合は、Oracle リスナーを構成します。

Oracle 11g

Oracle では、Oracle 11g のリスナーを構成するのではなく、extproc.ora ファイルを変更することで EXTPROC を構成することを推奨しています。extproc.ora ファイルは、ORACLE_HOME\hs\admin ディレクトリに格納されています。

ST_Geometry(st_shapelib)または ST_Raster ライブラリ、もしくはその両方を Oracle サーバに移動した後、これらのライブラリの場所を指すように extproc.ora ファイルを変更します。

Windows サーバでは、次のような行を追加します。

EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll

EXTPROC_DLLS=ONLY:C:\\mylibraries\\libst_raster_ora.dll

両方のライブラリを使用している場合は、これらを 1 行で記述できます。

EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll;C:\\mylibraries\\libst_raster_ora.dll

これらの例では、ライブラリは mylibraries というフォルダに配置されています。このフォルダは、ライブラリを格納するために Oracle サーバ上に作成されたフォルダです。

Linux または UNIX サーバ:

SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so

SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_raster_ora.so

両方のライブラリを使用している場合は、これらを 1 行で記述できます。

SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so:/user/esrilibs/libst_raster_ora.so

これらの例では、ライブラリはユーザの esrilibs というフォルダに配置されています。このフォルダは、ライブラリを格納するために Oracle サーバ上に作成されたフォルダです。

Oracle 10g

Oracle リスナーは柔軟に設定を変更することが可能です。たとえば、データベースに複数のリスナーを関連付けることができ、各リスナーが複数のタイプのサービス リクエストを管理できます。こうした複雑な構成については多数のバリエーションがあり、このドキュメントで取り上げることはできません。リスナーの構成方法については、『Oracle Database Net Services 管理者ガイド』をご参照いただくことが重要です。

リスナーの構成において最も重要な部分は、共有ライブラリの場所を extproc に指定することです。共有ライブラリの場所を指定するためにリスナー構成を変更し、構成の変更が反映されるように Oracle リスナー プロセスを再起動する必要があります。

2 つの標準の Oracle リスナー構成ファイル(tnsnames.ora および listener.ora)が必要です。通常は ORACLE_HOME/network/admin にあります。このドキュメントでは必要とされる構成設定を提示します。

設定を管理するための方法はいくつかあります。テキスト エディタでテキスト ファイルを編集するか、Oracle Net Manager を使用するか、Oracle Net Configuration Assistant を使用することができます。Oracle からは、リスナーの構成方法に関するドキュメントが提供されています。詳細については、『Oracle Database Net Services 管理者ガイド』をご参照ください。

tnsnames.ora ファイルには、既知のデータベース サービスのディレクトリが含まれています。このファイルによって、ローカル データベースまたはリモート サーバ上のサービスを定義できます。ここには、プロセス間通信(IPC)を使用して関数の呼び出しを extproc に送信するために、ローカル データベース サーバによって使用される、固有のエントリが 1 つ含まれています。このエントリには EXTPROC_CONNECTION_DATA というラベルが付いています。このエントリの Key 値と SID 値はユーザが変更できます。

これらのアイテムは、listener.ora ファイル内の対応する情報にこのエントリをリンクするために使用されます。キーには任意のショート ネームを付けることができますが、listener.ora ファイル内と tnsnames.ora ファイル内で同じ名前にする必要があります。これらの値では大文字と小文字が区別されます。これらを使用するのはリスナー プロセスのみで、ユーザやアプリケーションが使用することはありません。

listener.ora ファイルには、リスナーがリクエストを処理するサービスの一部(すべてである必要はない)が記述されます。

このファイル内で変更可能な値には、次のようなものがあります。

手順:
  1. 変更を行う前に、tnsnames.ora ファイルと listener.ora ファイルのバックアップ コピーを作成します。
  2. Oracle サーバで tnsnames.ora ファイルを開きます。
  3. tnsnames.ora ファイルの EXTPROC_CONNECTION_DATA で Key と SID の値を変更します。

    EXTPROC_CONNECTION_DATA =
    (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC1))
        )
        (CONNECT_DATA =
          (SID = PLSExtProc)
          (PRESENTATION = RO)
        )
    )

    この項目のラベルは必ず EXTPROC_CONNECTION_DATA でなければなりません。この項目は、データベース サーバがプロセス間通信を使用して extproc に関数呼び出しを送信するときに使用されます。

  4. Oracle サーバで listener.ora ファイルを開きます。
  5. 必要な項目を変更して、リスナーがリクエストを受け付けるサービスを設定します。

    最初の例は、ArcSDE アプリケーション サーバと Oracle の両方がインストールされた Windows オペレーティング システムの場合です。

    LISTENER =
    (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    (ADDRESS = (PROTOCOL = TCP)(HOST = svr1.dmn1.com)(PORT = 1521))
        )
     )
    
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
          (PROGRAM = extproc)
             (ENVS="EXTPROC_DLLS=C:\ArcSDE\sdeexe\bin\st_shapelib.dll;c:\ArcSDE\sdeexe\bin\libst_raster_ora.dll")
     )  
    )

    以下の例は、ArcSDE アプリケーション サーバと Oracle の両方がインストールされた Linux または UNIX の場合を示しています。

    LISTENER =
    (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    (ADDRESS = (PROTOCOL = TCP)(HOST = svr1.dmn1.com)(PORT = 1521))
        )
    )
    
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
    (ORACLE_HOME = /servit/oracle/product/10.2.0/db_1)
          (PROGRAM = extproc)
             (ENVS="EXTPROC_DLLS=/servit/ArcSDE/sdeexe/lib/libst_shapelib.so:/servit/ArcSDE/sdeexe/lib/libst_raster_ora.so")
        )
       )

  6. listener.ora ファイルを変更後、Oracle リスナーを再起動します。
9/14/2013