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

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

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

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

Библиотека ST_Geometry создана для заданных операционных систем. Вы можете скачать файл библиотеки для своей операционной системы и версии клиента с сайта My Esri.

Экземпляр Oracle должен иметь доступ к библиотеке ST_Geometry. Поместите библиотеку на компьютере с Oracle в папку, к которой есть доступ у экземпляра Oracle.

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

  1. Загрузите библиотеку ST_Geometry с сайта My Esri и поместите ее в папку на компьютере Oracle.
    Примечание:

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

    При развертывании на сервере Microsoft Windows для библиотеки ST_Geometry требуется Microsoft Visual C++ Redistributable Package (x64). См. Требования ArcGIS к базе данных 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).

    В этом экземпляре файл 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

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

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