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 ファイルには、リスナーがリクエストを処理するサービスの一部(すべてである必要はない)が記述されます。
このファイルでは以下のような値を変更できます。
- SID_LIST_LISTENER
このラベルで、LISTENER(デフォルトのリスナー名)という名前のリスナーにより処理される SID のリストが始まります。
- SID_LIST と SID_DESC
SID_LIST という見出しの下の SID_DESC 項目はサービスを定義します。リストの最初の項目が 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 を含みます。パス変数には通常、ジオメトリ ライブラリと投影エンジン ライブラリの場所を指定します。
- EXTPROC_DLLS
extproc が読み込み、関数を直接呼び出すことのできるライブラリのリストを定義する環境変数です。ここでは、ST_SHAPELIB ライブラリ(ST_Geometry タイプにアクセスしたり、SQL を使用して GDB_ITEMS_VW および GDB_ITEMRELATIONSHIPS_VW ビューにアクセスするために必要)と、LIBST_RASTER ライブラリ(SQL を使用して ST_Raster タイプにアクセスするために必要)を含むファイルへのパスを指定する必要があります。
リストは、UNIX 版の Oracle サーバではコロンで区切り、Windows 版の Oracle サーバではセミコロンで区切ります。すべてのパスは絶対パスで、ローカル ディレクトリまたは Oracle システム ユーザがアクセスできる UNC パスを指している必要があります。これは、Oracle とは別のサーバに ArcSDE をインストールした場合は、Oracle サーバに ST_SHAPELIB と LIBST_RASTER ライブラリをコピーする必要があるということでもあります。詳細については、「異なるサーバへの Oracle と ArcSDE のインストール」をご参照ください。
環境変数の文字列置換はありません。
オプションのキーワード ANY と ONLY を指定すると、extproc がライブラリ ファイルを使用する際の制限を変更することができます。パスの前に ANY を指定すると、指定したパスから任意のライブラリを読み込むことができ、ライブラリ名を指定する必要がありません。パスの前に ONLY を指定すると、パスで指定した特定のライブラリだけが使用されます。
- 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(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") ) )
- listener.ora ファイルを変更後、Oracle リスナーを再起動します。