Настройка 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 на одном компьютере может вызвать проблемы с производительностью из-за конкуренции за ресурсы на компьютере.

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

  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.

    Вы должны подключиться к базе данных как пользователь sde и создать или перестроить библиотеку ST_Geometry.

    В этом примере библиотека 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;

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

Проверка конфигурации 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

Обновления и библиотека ST_Geometry

Если вы задали место установки ArcGIS Server, вы получите обновленные библиотеки при установке новых версий ArcGIS Server. Если вы разместили библиотеки в другом месте, необходимо загрузить или скопировать новые версии файла библиотеки, чтобы получить исправления и улучшения, внесенные в новые версии библиотеки.

Oracle может пометить библиотеку как недействительную при ее замене или после обновления экземпляра Oracle. Oracle иногда автоматически перекомпилирует недопустимые объекты базы данных, когда на объекты ссылается клиент, но в некоторых случаях они не компилируются автоматически.

Библиотека ST_Geometry принадлежит пользователю sde. Чтобы проверить статус библиотеки (и всех файлов, принадлежащих пользователю sde), войдите в клиент SQL как пользователь sde и запустите следующее выражение:

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

Если тело пакета sde.st_geometry_shapelib_pkg возвращается в списке недопустимых объектов, перекомпилируйте его, как это описано на шаге 5 расположенного выше раздела Настройка extproc.

Если некорректными являются несколько объектов, вы можете перекомпилировать все объекты в одной схеме. См. документацию Oracle для изучения необходимых прав доступа и инструкций по перекомпиляции нескольких объектов сразу.