SQL を使用してジオデータベースにアクセスするための Oracle extproc の構成
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 リスナーを構成していなくても ArcGIS で ST_Geometry と ST_Raster を使用できます。ただし、ArcGIS クライアントの一部の機能と、SQL クライアントの機能すべて(SQL*Plus など)が使用できなくなります。たとえば、Oracle リスナーが構成されていない場合、ArcMap のクエリ レイヤの ST_Geometry 列で SQL 関数を使用したり、データベースのビュー内のフィーチャを特定したり、ST_Raster 列を含むバージョン テーブルを使用したり、ST_Raster 列を含む行を削除したり、SQL クライアントから SQL 関数を実行できません。また、Oracle リスナーを構成していない場合は、データベースから ST_Geometry タイプを使用するデータをフィーチャ サービスとして公開できません。
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 サーバでは、次のような行を追加します。
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\libst_raster_ora.dll
両方のライブラリを使用している場合は、これらを 1 行で記述できます。
SET 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 に関数呼び出しをするためのものです。このエントリには 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 に関数呼び出しを送信するときに使用されます。
- Oracle サーバで listener.ora ファイルを開きます。
-
必要な項目を変更して、リスナーがリクエストを受け付けるサービスを設定します。
最初の例は、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") ) )
- listener.ora ファイルを変更後、Oracle リスナーを再起動します。