Настройка extproc для доступа к ST_Geometry в Oracle

Функции SQL ST_Geometry в Oracle используют общую библиотеку, которая работает с Oracle через агент внешней процедуры Oracle, называемый extproc. Oracle требует физического доступа к файлам библиотеки для:

Чтобы выполнять перечисленные выше задачи, необходимо настроить среду внешних процедур Oracle для вызова библиотеки ST_Geometry — ST_SHAPELIB.

Подготовительные шаги

Библиотека 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 установлены на одном компьютере, вы можете настроить файл extproc.ora так, чтобы он задавал файл в директории установки ArcGIS Server.

Примечание:

Если вы настроите файл extproc.ora, чтобы он задавал файл в директории установки ArcGIS Server, вы можете пропустить подготовительные шаги, описанные ниже. Однако запуск ArcGIS Server и Oracle на одном компьютере может вызвать проблемы с производительностью из-за конкуренции за ресурсы на компьютере.

Прежде чем настраивать Oracle extproc, выполните эти шаги:

  1. Если экземпляр Oracle не имеет доступа к указанным выше местам установки ArcGIS Server, загрузите библиотеку ST_Geometry с My Esri или скопируйте файл с компьютера ArcGIS Server в папку на компьютере с Oracle.
    Примечание:

    Убедитесь, что вы загрузили или скопировали библиотеку, соответствующую вашей операционной системе Oracle.

    При развертывании на сервере Microsoft Windows для библиотеки ST_Geometry требуется Microsoft Visual C++ Redistributable Package (x64). См. требования к базе данных Oracle, чтобы узнать о требующейся версии пакета. Если данный пакет отсутствует на сервере Oracle, загрузите его с сайта Microsoft и установите.

  2. Когда вы запускаете инструмент геообработки Создать пространственный тип, чтобы включить ST_Geometry в базе данных Oracle, или запускаете инструменты геообработки Создать многопользовательскую базу геоданных или Включить многопользовательскую базу геоданных, чтобы создать базу геоданных, инструменты задают путь по умолчанию для библиотеки ST_SHAPELIB.
  3. Подключитесь к экземпляру Oracle как пользователь sde из клиента SQL и выполните следующую команду SQL, чтобы подтвердить, что путь, заданный инструментом, совпадает с местоположением библиотеки ST_Geometry:

    SELECT file_spec
     FROM user_libraries
     WHERE library_name = 'ST_SHAPELIB';

    Если возвращенный путь не соответствует местоположению файла библиотеки ST_Geometry, необходимо пересоздать библиотеку после настройки extproc.

Настройка extproc

Настройте в файле Oracle extproc.ora местоположение файла библиотеки ST_Geometry.

  1. Сделайте резервную копию файла extproc.ora на сервере Oracle.
  2. Откройте файл extproc.ora в текстовом редакторе и измените его, чтобы задать местоположение библиотеки st_shapelib.dll (Windows) или libst_shapelib.so (Linux или UNIX).

    В этом примере на Oracle Windows сервере не был установлен клиент ArcGIS, поэтому библиотека st_shapelib.dll была скопирована в директорию mylibraries на компьютере Oracle. Следующая строка была добавлена в extproc.ora, чтобы указать местоположение библиотеки ST_Geometry в этой директории:

    SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll

    В этом примере на сервере Linux или UNIX, для указания библиотеки ST_Geometry в директории пользователя esrilibs, которая была создана на сервере Oracle для хранения библиотеки, добавляется следующая строка:

    SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so

  3. Сохраните и закройте файл extproc.ora.

    Может потребоваться перезапуск экземпляра Oracle для считывания изменений в файле extproc.ora.

  4. Если вы изменили расположение файла библиотеки ST_Geometry по умолчанию, и местоположение не указано, создайте или пересоздайте библиотеку ST_SHAPELIB в базе данных Oracle.

    В этом примере библиотека ST_SHAPELIB находится в директории mylibraries на сервере Oracle Windows, где расположен файл st_shapelib.dll.

    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;

  6. Все клиенты, которым требуется доступ к библиотекам (включая веб-сервисы), должны заново подключиться к базе данных.

Проверка конфигурации extproc

Вы можете запросить библиотеку ST_Geometry, чтобы убедиться, что extproc может получить к ней доступ.

  1. Войдите в клиент SQL Oracle.
  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 настроен неправильно, вы можете увидеть одно или несколько из следующих сообщений об ошибках:

    ORA-06520: PL/SQL: Ошибка при загрузке внешней библиотеки

    ORA-06522: Не удалось загрузить карту DLL

    ORA-06512: в "SDE.ST_GEOMETRY_SHAPELIB_PKG", строка 0

    ORA-06512: в "SDE.ST_GEOMETRY_OPERATORS", строка 68