Oracle の ST_Geometry と ST_Raster という SQL 関数が使用する共有ライブラリには、Oracle の外部プロシージャ エージェント (extproc) を経由してアクセスします。ST_Geometry または ST_Raster を含む SQL を使用したり、GDB_ITEMS_VW および GDB_ITEMRELATIONSHIPS_VW ビュー内の ArcSDE XML 列にアクセスするには、Oracle がこれらの共有ライブラリにアクセスできるようにする必要があります。したがって、ライブラリは Oracle サーバー上に存在している必要があり、これらのライブラリを Oracle の外部プロシージャ フレームワークを通して呼び出す必要があります。
Oracle extproc を設定しなくても、ArcGIS で ST_Geometry と ST_Raster を使用することは可能です。ただし、ArcGIS クライアントの一部の機能と、SQL クライアントの機能すべて (SQL*Plus など) が使用できなくなります。たとえば、extproc が構成されていない場合、ArcMap のクエリ レイヤーの ST_Geometry 列で SQL 関数を使用したり、データベースのビュー内のフィーチャを特定したり、ST_Raster 列を含むバージョン テーブルを使用したり、ST_Raster 列を含む行を削除したり、ST_Geometry データを含むフィーチャ サービスを公開したり、SQL クライアントから SQL 関数を実行することはできません。
Oracle 11g または 12c を使用している場合は、extproc.ora ファイルを編集して、Oracle の外部プロシージャ フレームワークを通して関数を呼び出すようにします。Oracle 10g を使用している場合は、Oracle リスナーを構成します。
Oracle 11g および 12c
Oracle では、Oracle 11g および 12c のリスナーを構成するのではなく、extproc.ora ファイルを変更して extproc を構成することを推奨しています。extproc.ora ファイルは、ORACLE_HOME\hs\admin ディレクトリに格納されています。
- extproc.ora ファイルのバックアップ コピーを Oracle サーバーに作成します。
- extproc.ora ファイルを開き、ST_Geometry (st_shapelib) ライブラリまたは ST_Raster ライブラリ (あるいは、その両方) の場所を指定するように変更します。
Windows サーバー上のこの例では、次の行を追加して、mylibraries という名前のフォルダー内の ST_Geometry ライブラリを指定します。
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll
ST_Geometry ライブラリと ST_Raster ライブラリを両方とも使用する場合は、次のように、両方のエントリを 1 行に配置できます。
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll;C:\\mylibraries\\libst_raster_ora.dll
Linux または UNIX サーバー上のこの例では、次の行を追加して、ユーザーの esrilibs ディレクトリ内の ST_Geometry ライブラリを指定しています。esrilibs ディレクトリは、ライブラリを格納するために Oracle サーバー上に作成されています。
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so
ST_Geometry ライブラリと ST_Raster ライブラリを両方とも使用する場合は、次のように、両方のエントリを 1 行に配置できます。
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so:/user/esrilibs/libst_raster_ora.so
- extproc.ora ファイルを保存して閉じます。
- ライブラリ (Web サービスを含む) にアクセスする必要のあるすべてのクライアントは、データベースに再接続する必要があります。
Oracle 10g
リスナーの構成において最も重要な部分は、共有ライブラリの場所を 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 に関数呼び出しをするためのものです。このエントリには EXTPROC_CONNECTION_DATA というラベルが付いています。このエントリの Key 値と SID 値はユーザーが変更できます。
これらのアイテムは、listener.ora ファイル内の対応する情報にこのエントリをリンクするために使用されます。キーには任意のショート ネームを付けることができますが、listener.ora ファイル内と tnsnames.ora ファイル内で同じ名前にする必要があります。これらの値では大文字と小文字が区別されます。これらを使用するのはリスナー プロセスのみで、ユーザーやアプリケーションが使用することはありません。
listener.ora ファイルには、リスナーがリクエストを処理するサービスの一部 (すべてである必要はない) が記述されます。
このファイル内で変更可能な値には、次のようなものがあります。
- SID_LIST_LISTENER
このラベルは、LISTENER (デフォルト リスナー名) という名前のリスナーで処理される SID のリストの最初に存在します。
- SID_LIST および SID_DESC
見出しの SID_LIST の下にある SID_DESC エントリは、サービスを定義します。リストの 1 番目は extproc リクエストを処理し、2 番目はクライアント セッションを処理します。
- SID_NAME
この値は、tnsnames.ora ファイル内で extproc に指定されている SID と一致させる必要があります。
- ORACLE_HOME
このサービスの Oracle ホームの場所を定義します。extproc プログラム ファイルはこの場所の下にあるフォルダーから読み込みます。
- PROGRAM
extproc 実行可能ファイルのファイル名を指定します。この名前は大文字と小文字が区別され、オペレーティング システムの種類によって extproc または extproc.exe になります。このファイルは ORACLE_HOME/bin に配置されています。
- ENVS
extproc が実行時に使用する環境変数のリストです。このリストはコロン区切りです。このリストには、環境変数 EXTPROC_DLLS と、extproc が実行時に使用するその他の環境変数 (UNIX および Linux システムでは LD_LIBRARY_PATH、SHLIB_PATH、または LIBPATH、Windows サーバーでは PATH などを含む) の定義を含めなくてはなりません。PATH 変数には、多くの場合、ジオメトリと投影エンジンのライブラリの場所が含まれています。
- EXTPROC_DLLS
この環境変数は、extproc が読み込んで、関数を直接呼び出すことのできるライブラリのリストを定義します。ここでは、shape ライブラリ (ST_Geometry タイプにアクセスしたり、SQL を使用して GDB_ITEMS_VW および GDB_ITEMRELATIONSHIPS_VW ビューにアクセスするために必要) と、st_raster ライブラリ (SQL を使用して ST_Raster タイプにアクセスするために必要) を含むファイルへのパスを指定する必要があります。
UNIX にインストールされた Oracle サーバーではリストはコロン区切りで、Windows にインストールされた Oracle サーバーではセミコロン区切りです。パスはすべて、絶対パスでローカル ディレクトリを指しているか、Oracle システム ユーザーがアクセスできる UNC パスでなければなりません。これは、Oracle とは別のサーバーに ArcSDE アプリケーション サーバーをインストールした場合は、Oracle サーバーに SDEHOME 環境変数で指定されたフルパス名の下にあるbin ディレクトリから ST_SHAPELIB と LIBST_RASTER ライブラリをコピーする必要があるということでもあります。
環境変数の代替は存在しません。
オプションのキーワードである ANY および ONLY を使用することで、extproc によるライブラリ ファイルの使用を開放または制限できます。パスの先頭に ANY を付けると、Oracle は指定したパスからすべてのライブラリを読み込むことができます。ライブラリ名を指定する必要はありません。パスの先頭に ONLY を付けると、Oracle はパス内に指定された特定のライブラリのみを使用します。
- KEY
この項目で設定した値によって、tnsnames.ora ファイルの該当するサービス項目にこのリスナーがリンクされます。これによって、このリスナーは同じデータベース サーバー上に存在する IPC リスナーと区別されます。KEY は任意の短い名前ですが、listener.ora ファイルと tnsnames.ora ファイルで同じでなければなりません。KEY は大文字と小文字が区別されます。
- 変更を行う前に、tnsnames.ora ファイルと listener.ora ファイルのバックアップ コピーを作成します。
- Oracle サーバーで tnsnames.ora ファイルを開きます。
- 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 に関数呼び出しを送信するときに使用されます。
- 変更内容を保存して tnsnames.ora を閉じます。
- Oracle サーバーで listener.ora ファイルを開きます。
- 必要な項目を変更して、リスナーがリクエストを受け付けるサービスを設定します。
以下の最初の例は、Windows オペレーティング システム用です。ST_Geometry ライブラリと ST_Raster ライブラリは、gislibs という名前のフォルダーにあります。
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:\gislibs\st_shapelib.dll;C:\gislibs\libst_raster_ora.dll") ) )
次の例は、ST_Geometry ライブラリと ST_Raster ライブラリが /arcgis/libs に格納されいている 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=/arcgis/libs/libst_shapelib.so:/arcgis/libs/libst_raster_ora.so") ) )
- listener.ora ファイルを変更して保存した後に、Oracle リスナーを再起動します。