Oracle の ST_Geometry にアクセスするための extproc の構成

Oracle の ST_Geometry SQL 関数が使用する共有ライブラリには、OracleOracle の外部プロシージャ エージェント (extproc) を経由してアクセスします。 次に示す操作を実行するには、Oracle から物理ライブラリ ファイルにアクセスできるようにする必要があります。

上記のタスクを実行する ST_Geometry ライブラリ ST_SHAPELIB を呼び出すように Oracle の外部プロシージャ フレームワークを構成する必要があります。

準備作業

各オペレーティング システム専用の ST_Geometry ライブラリが作成されています。 My Esri から、お使いのオペレーティング システムおよびクライアント バージョンに固有のライブラリ ファイルをダウンロードできます。

Oracle インスタンスが ST_Geometry ライブラリにアクセス可能でなければなりません。 Oracle インスタンスがアクセス可能な Oracle コンピューター上のディレクトリにこのライブラリを配置します。

Oracle extproc ファイルを構成する前に、次の手順を実行します。

  1. My Esri から ST_Geometry ライブラリをダウンロードして、Oracle コンピューター上のディレクトリに配置します。
    注意:

    必ず、Oracle のオペレーティング システムに対応する正しいライブラリをダウンロードするかコピーしてください。

    ST_Geometry ライブラリは、Microsoft Windows サーバー上に配置された場合、Microsoft Visual C++ 再頒布可能パッケージ (x64) を必要とします。 必要となるパッケージ バージョンについては、「Oracle での ArcGIS の要件」をご参照ください。 このパッケージが Oracle サーバー上に存在しない場合は、Microsoft のサイトからダウンロードしてインストールしてください。

  2. [空間タイプの作成 (Create Spatial Type)] ジオプロセシング ツールを実行して Oracle データベース内の ST_Geometry を有効にするか、[エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] または [エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ジオプロセシング ツールを実行してジオデータベースを作成すると、ST_SHAPELIB ライブラリのデフォルト パスが設定されます。
  3. 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 ファイルを構成します。

  1. extproc.ora ファイルのバックアップを Oracle サーバーに作成します。
  2. テキスト エディターで extproc.ora ファイルを開き、st_shapelib.dll ライブラリ (Windows) または libst_shapelib.so ライブラリ (Linux または UNIX) の場所を参照するように変更します。

    この例では、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

  3. extproc.ora ファイルを保存して閉じます。

    extproc.ora ファイル内の変更を識別するために、Oracle インスタンスの再起動が必要になる場合があります。

  4. ST_Geometry ライブラリ ファイルの場所をデフォルトの場所から変更した場合や場所が設定されていない場合は、Oracle データベース内に ST_SHAPELIB ライブラリを作成または再作成します。

    ST_Geometry ライブラリを作成または再作成するには、sde ユーザーとしてデータベースに接続する必要があります。

    この例の ST_SHAPELIB ライブラリは、st_shapelib.dll ファイルが配置された OracleWindows サーバー上の mylibraries ディレクトリに設定されています。

    CREATE or REPLACE LIBRARY ST_SHAPELIB
     AS 'C:\mylibraries\st_shapelib.dll';

  5. ライブラリを再作成した場合は、sde.st_geometry_shapelib_pkg パッケージを再コンパイルします。

    ALTER PACKAGE sde.st_geometry_shapelib_pkg COMPILE
     REUSE SETTINGS;

    ライブラリ (Web サービスを含む) にアクセスする必要のあるすべてのクライアントは、データベースに再接続する必要があります。

extproc 構成の検証

ST_Geometry ライブラリに対してクエリを実行することで、extproc がこのライブラリにアクセスできることを確認することができます。

  1. Oracle SQL クライアントにサイン インします。
  2. 次のクエリを実行します。

    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 が適切に構成されていない場合、次のようなエラー メッセージが 1 つ以上表示されることがあります。

    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

アップグレードと ST_Geometry ライブラリ

Oracle のジオデータベースをアップグレードする場合、または Oracle データベースで ST_Geometry タイプをアップグレードする必要がある場合に、新しいバージョンのライブラリに含まれている修正および改善を取得するには、このファイルをダウンロードまたはコピーする必要があります。

ライブラリが置き換えられた場合や Oracle インスタンスをアップグレードした場合、Oracle でライブラリが無効になることがあります。 Oracle では、オブジェクトがクライアントによって参照されるときに無効なデータベース オブジェクトが自動的に再コンパイルされることがありますが、自動的にコンパイルされないこともあります。

ST_Geometry ライブラリは sde ユーザーによって所有されます。 このライブラリ (および sde ユーザーによって所有されるすべてのファイル) のステータスを確認するには、sde ユーザーとして SQL クライアントにサイン インして次のステートメントを実行します。

SELECT object_name, object_type
  FROM USER_OBJECTS
  WHERE STATUS = 'INVALID';

無効なオブジェクトのリストで sde.st_geometry_shapelib_pkg パッケージ本体が返された場合は、上記の「extproc の構成」のステップ 5 に記載のとおり、パッケージを再コンパイルしてください。

複数のオブジェクトが無効な場合は、同じスキーマのすべてのオブジェクトを再コンパイルできます。 複数のオブジェクトを同時に再コンパイルするために必要な権限と手順については、Oracle のドキュメントをご参照ください。