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

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 リスナーを設定する必要があります。

メモメモ:

Oracle リスナーを設定しなくても、ArcGIS で ST_Geometry と ST_Raster を使用することは可能です。しかし、ArcSDE のクライアントがその機能をフルに利用することはできず、また SQL*Plus のような SQL クライアントではその機能はまったく利用できません。Oracle リスナーを設定していない場合、たとえば、ArcMap のクエリ レイヤまたは ST_Raster 列を含むバージョン テーブルで ST_Geometry 列に対して SQL 関数を使用したり、ST_Raster 列を含む行を削除したり、SQL クライアントから SQL 関数を実行したりすることはできません。

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

Oracle リスナーは柔軟に設定を変更することが可能です。たとえば、データベースに複数のリスナーを関連付けることができ、各リスナーが複数のタイプのサービス リクエストを管理できます。Oracle リスナーの設定は複雑なため、ここですべてを説明することはできません。Oracle リスナーの設定の詳細については、『Oracle Database Net Services 管理者ガイド』を参照してください。

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

Oracle リスナー設定に関連する標準のファイルは、tnsnames.ora と listener.ora の 2 つです。通常は ORACLE_HOME/network/admin にあります。ここでは、必要な設定について説明します。

設定の変更にはいくつかの方法があり、テキスト エディタを使用してテキスト ファイルとして編集するか、Oracle Net Manager を使用するか、または Oracle Net Configuration Assistant を使用します。リスナーの設定方法は Oracle のマニュアルに記載されています。詳細については、『Oracle Database Net Services 管理者ガイド』をご参照ください。

tnsnames.ora ファイルには、既知のデータベース サービスのディレクトリが含まれています。tnsnames.ora ファイルで、ローカル データベース上またはリモート サーバ上のサービスを定義することができます。項目の 1 つは、ローカル データベース サーバがプロセス間通信(IPC)を使用して extproc に関数呼び出しを送信するときに使用されます。この項目には、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(IBM AIX を除く)の場合を示しています。

    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")
        )
       )

    以下の例は、IBM AIX の ArcSDE for Oracle の場合を示しています。

    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_64.so:/servit/ArcSDE/sdeexe/lib/libst_raster_ora_64.so")
         )
       )

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

3/6/2012