Oracle の ST_Geometry SQL 関数が使用する共有ライブラリには、Oracle が Oracle の外部プロシージャ エージェント (extproc) を経由してアクセスします。次に示す操作を実行するには、 Oracle から物理ライブラリ ファイルにアクセスできるようにする必要があります。
- SQL クライアントから SQL 関数 ST_Geometry を実行する。
- ST_Geometry 列で SQL 関数を実行するクエリ レイヤーを ArcMap または ArcGIS Pro 内に定義する。
- ArcGIS Pro でビン フィーチャ レイヤーに対するクエリを実行する。
- Oracle データベースのデータを参照する Web レイヤーを公開する。
- [空間検索 (Select Layer By Location)] ジオプロセシング ツールを [交差する (DBMS)] オプションを使用して実行します。
上記のタスクを実行する ST_Geometry ライブラリ ST_SHAPELIB を呼び出すように Oracle の外部プロシージャ フレームワークを構成する必要があります。
準備作業
各オペレーティング システム専用の ST_Geometry ライブラリが作成されています。 このファイルを ArcGIS Server のインストール場所からコピーするか、My Esri からダウンロードすることができます。
ライブラリは ArcGIS Server の以下の場所にインストールされています。
- <ArcGIS Server installation directory>\ArcGIS\Server\DatabaseSupport\Oracle\Windows64\st_shapelib.dll
- <ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/linux64/libst_shapelib.so
- <ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/ibmaix64/libst_shapelib.so
- <ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/sunos64/libst_shapelib.so
Oracle インスタンスが ST_Geometry ライブラリにアクセス可能でなければなりません。 このインスタンスがアクセス可能な Oracle コンピューター上のディレクトリにこのライブラリを配置するか、ArcGIS Server と Oracle が同じコンピューターにインストールされている場合、ArcGIS Server インストール ディレクトリ内のファイルを参照するように extproc.ora ファイルを構成します。
注意:
ArcGIS Server インストール ディレクトリ内のファイルを参照するように extproc.ora ファイルを構成した場合、以下の準備作業はスキップできます。 ただし、ArcGIS Server と Oracle を同じコンピューター上で実行すると、コンピューター上でリソースの競合が発生してパフォーマンスが低下することがあります。
Oracle extproc を構成する前に、次の手順を完了する必要があります。
- Oracle インスタンスから上記の ArcGIS Server のインストール場所にアクセスできない場合は、ST_Geometry ライブラリを My Esri からダウンロードするか、ArcGIS Server コンピューターから Oracle コンピューター上のディレクトリにファイルをコピーします。
注意:
必ず、Oracle のオペレーティング システムに対応する正しいライブラリをダウンロードするかコピーしてください。
ST_Geometry ライブラリは、Microsoft Windows サーバー上に配置された場合、Microsoft Visual C++ 再頒布可能パッケージ (x64) を必要とします。 必要となるパッケージ バージョンについては、「Oracle データベース要件」をご参照ください。 このパッケージが Oracle サーバー上に存在しない場合は、Microsoft のサイトからダウンロードしてインストールしてください。
- sde ユーザーとして SQL クライアントから Oracle インスタンスに接続した後、次の SQL を実行し、ツールによって設定されたパスと ST_Geometry ライブラリの場所が一致していることを確認します。
SELECT file_spec FROM user_libraries WHERE library_name = 'ST_SHAPELIB';
この結果として返されたパスが ST_Geometry ライブラリ ファイルの場所と一致しない場合は、extproc を構成した後でライブラリを再作成する必要があります。
extproc の構成
ST_Geometry ライブラリ ファイルの場所を参照するように Oracle extproc.ora ファイルを構成します。
- extproc.ora ファイルのバックアップ コピーを Oracle サーバーに作成します。
- テキスト エディターで extproc.ora ファイルを開き、st_shapelib.dll ライブラリ (Windows) または libst_shapelib.so ライブラリ (Linux または UNIX) の場所を参照するように変更します。
この例では、Oracle の Windows サーバー上に ArcGIS クライアントがインストールされていないため、st_shapelib.dll が Oracle コンピューター上の mylibraries というディレクトリにコピーされています。 そのディレクトリにある ST_Geometry ライブラリを指定するように、extproc.ora に次の行を追加します。
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll
Linux または UNIX サーバー上のこの例では、次の行を追加して、ユーザーの esrilibs ディレクトリ内の ST_Geometry ライブラリを指定しています。esrilibs ディレクトリは、ライブラリを格納するために Oracle サーバー上に作成されています。
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so
- extproc.ora ファイルを保存して閉じます。
extproc.ora ファイル内の変更を認識するために、Oracle インスタンスの再起動が必要になる場合があります。
- ST_Geometry ライブラリ ファイルの場所をデフォルトの場所から変更した場合や場所が設定されていない場合は、Oracle データベース内に ST_SHAPELIB ライブラリを作成または再作成します。
この例の ST_SHAPELIB ライブラリは、st_shapelib.dll ファイルが配置された Oracle の Windows サーバー上の mylibraries ディレクトリに設定されています。
CREATE or REPLACE LIBRARY ST_SHAPELIB AS 'C:\mylibraries\st_shapelib.dll';
- ライブラリを再作成した場合は、sde.st_geometry_shapelib_pkg パッケージを再コンパイルします。
ALTER PACKAGE sde.st_geometry_shapelib_pkg COMPILE REUSE SETTINGS;
- ライブラリ (Web サービスを含む) にアクセスする必要のあるすべてのクライアントは、データベースに再接続する必要があります。
extproc 構成の検証
ST_Geometry ライブラリに対してクエリを実行することで、extproc がこのライブラリにアクセスできることを確認することができます。
- Oracle SQL クライアントにサイン インします。
- 次のクエリを実行します。
SELECT sde.ST_AsText(SDE.ST_Geometry('POINT (10 10)', 0)) FROM dual;
extproc が適切に構成されている場合、このクエリでは以下が返されます。
SDE.ST_ASTEXT(SDE.ST_GEOMETRY('POINT(1010)',0)) -------------------------------------------------------------------------------- POINT ( 10.00000000 10.00000000)
extproc が適切に構成されていない場合、次のようなエラー メッセージが表示されます。
ORA-06520: PL/SQL: Error loading external library
ORA-06522: Unable to load DLL
ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 0
ORA-06512: at "SDE.ST_GEOMETRY_OPERATORS", line 68