Функции SQL ST_Geometry и ST_Raster в Oracle используют общие библиотеки, доступ к которым выполняется через агент внешней процедуры Oracle или extproc. Для использования SQL с ST_Geometry или ST_Raster, а также выполнения доступа к столбцам ArcSDE XML в видах GDB_ITEMS_VW и GDB_ITEMRELATIONSHIPS_VW, Oracle должен иметь возможность доступа к библиотекам. Поэтому библиотеки должны присутствовать на сервере Oracle и вызываться через среду внешней процедуры Oracle.
Использование ST_Geometry и ST_Raster в ArcGIS возможно без настройки extproc в Oracle. Однако вы не будете обладать всей функциональностью клиентов ArcGIS, а также функциональностью клиентов SQL, например SQL*Plus. Например, вы не сможете использовать функции SQL в столбцах ST_Geometry слоев запроса ArcMap, идентифицировать пространственные объекты в представления баз данных, создавать версионные таблицы, содержащие столбцы ST_Raster, удалять строку, содержащую столбец ST_Raster, публиковать сервисы объектов, содержащие данные ST_Geometry, или исполнять функции SQL из клиентов SQL без настройки extproc в Oracle.
Если вы используете Oracle 11g или 12c, выполните редактирование файла extproc.ora для вызова функций с использованием среды внешней процедуры Oracle. Если вы используете Oracle 10g, выполните конфигурирование приемника Oracle.
Oracle 11g и 12c
Oracle рекомендует выполнять настройку extproc редактированием файла extproc.ora, вместо настройки listener для Oracle 11g и 12c. Файл extproc.ora расположен в директории ORACLE_HOME\hs\admin.
- Сделайте резервную копию файла extproc.ora на сервере Oracle.
- Откройте extproc.ora и измените его, чтобы указать местоположение библиотек ST_Geometry (st_shapelib) и/или ST_Raster.
В этом примере на сервере Windows, для указания библиотеки ST_Geometry в папке mylibraries добавляется следующая строка:
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll
Если вы используете обе библиотеки, ST_Geometry и ST_Raster, вы можете ввести их в одной строке:
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll;C:\\mylibraries\\libst_raster_ora.dll
В этом примере на сервере Linux или UNIX, для указания библиотеки ST_Geometry в папке пользователя esrilibs, которая была создана на сервере Oracle для хранения библиотеки, добавляется следующая строка:
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so
Если вы используете обе библиотеки, ST_Geometry и ST_Raster, вы можете ввести их в одной строке:
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so:/user/esrilibs/libst_raster_ora.so
- Сохраните и закройте файл extproc.ora.
- Все клиенты, которым требуется доступ к библиотекам (включая веб-сервисы), должны заново подключиться к базе данных.
Oracle 10g
Основным моментом конфигурирования приемника является указание extproc места хранения общих библиотек. Вам необходимо изменить конфигурацию приемника для указания расположения общих библиотек, а затем перезапустить процесс приемника Oracle для вступления в силу изменений конфигурации.
Применяется два стандартных файла конфигурации приемника Oracle: tnsnames.ora и listener.ora. Обычно эти файлы находятся по пути ORACLE_HOME/net/admin. Настоящий документ содержит необходимые параметры конфигурации.
Существует несколько способов управления параметрами. Вы можете выполнить редактирования текстовых файлов с применением текстового редактора, использовать Oracle Net Manager или Oracle Net Configuration Assistant. Компания Oracle предоставляет документацию по конфигурированию приемника. Дополнительные сведения см. в руководстве администратора Oracle Database Net Services.
Файл tnsnames.ora содержит папку известных сервисов базы данных. Данный файл может определять сервисы в локальной базе данных или на удаленных серверах. Одна запись применяется специально для сервера локальной базы данных с целью использования связи между процессами (IPC) для отправки вызова функции к extproc. Данная запись называется EXTPROC_CONNECTION_DATA. В данной записи вы можете изменять значения ключа и SID.
Данные элементы используются для связи указанной записи с соответствующей информацией в файле listener.ora. Ключом может быть любое короткое имя, но оно должно совпадать в файлах listener.ora и tnsnames.ora. Для данных значений учитывается регистр. Они используются только процессом приемника, а не пользователями или приложениями.
Файл listener.ora описывает некоторые (не обязательно все) сервисы, для которых приемник осуществляет прием запросов.
В данном файле можно изменять следующие значения:
- SID_LIST_LISTENER
Данной подписью начинается список SID, управляемый приемником с именем LISTENER (имя приемника по умолчанию).
- SID_LIST и SID_DESC
Записи SID_DESC под заголовком SID_LIST определяют сервисы. Первый в списке управляет запросами extproc, второй управляет сеансами клиента.
- SID_NAME
Значение для данного параметра должно соответствовать SID, указанному для extproc в файле tnsnames.ora.
- ORACLE_HOME
Определяет расположение Oracle home для данного сервиса. Файлы программы extproc загружаются из папки, указанной в данном месте.
- PROGRAM
Указывает имя исполняемого файла extproc. Данное имя учитывает регистр и может быть extproc или extproc.exe в зависимости от типа операционной системы. Файл расположен в ORACLE_HOME/bin.
- ENVS
Это перечень переменных среды, которые использует во время работы extproc. Список разделяется двоеточием. Данный список должен включать в себя определение переменной среды EXTPROC_DLLS и остальных переменных среды, необходимых для работы extproc, к ним обычно относятся LD_LIBRARY_PATH, SHLIB_PATH или LIBPATH для UNIX и Linux систем, а также PATH для серверов Windows. Переменная пути path обычно содержит расположение библиотек геометрии и параметров проекции.
- EXTPROC_DLLS
Эта переменная среды определяет список библиотек, которые может загружать extproc и из которых он может выполнять прямой вызов функций. Путь к файлу, содержащему библиотеку геометрии, которая необходима для доступа к типам ST_Geometry или для просмотра GDB_ITEMS_VW и GDB_ITEMRELATIONSHIPS_VW с помощью SQL, и библиотеку st_raster, необходимую для доступа к типу ST_Raster с помощью SQL, задается здесь.
Список разделен двоеточием для серверов Oracle, установленных на UNIX, и точкой с запятой для серверов Oracle, установленных на Windows. Все пути должны быть абсолютными и указывать на локальные директории или путь UNC, к которому имеет доступ пользователь системы Oracle. Это также означает, что если вы установили сервер приложения ArcSDE на сервер, отличный от Oracle, то вы должны выполнить копирование библиотек формы и растра из папки bin в SDEHOME на сервер Oracle.
Подстановка переменной среды не доступна.
Для ослабления или ограничения использования extproc файлов библиотеки возможно использование дополнительных ключевых слов ANY и ONLY. Если вы укажите в начале пути ключевое слово ANY, Oracle сможет загрузить любую библиотеку по указанному пути, имя библиотеки указывать не нужно. Если вы укажите в начале пути ключевое слово ONLY, Oracle сможет загрузить только ту библиотеку, путь к которой вы указали.
- KEY
Значение, присваиваемое данному элементу, используются для связи данного приемника с соответствующей записью сервиса в файле tnsnames.ora. Он используется для того, чтобы отличить данный приемник от других приемников IPC, которые могут находиться на одном сервере базы данных. Ключом может быть любое короткое имя, но оно должно совпадать в файлах listener.ora и tnsnames.ora. Ключ чувствителен к регистру.
- Перед внесением любых изменений сделайте резервные копии файлов tnsnames.ora и listener.ora.
- Откройте файл tnsnames.ora на сервере Oracle.
- Измените значения Key и SID в EXTPROC_CONNECTION_DATA файла tnsnames.ora.
EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC1)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )
Данная запись должна всегда иметь подпись EXTPROC_CONNECTION_DATA. Данная запись используется сервером базы данных для связи между процессами с целью отправки вызова функции к extproc.
- Сохраните изменения и закройте файл tnsnames.ora.
- Откройте файл listener.ora на сервере Oracle.
- Измените необходимые поля для настройки сервисов, от которых приемник осуществляет прием запросов.
Этот первый пример предназначен для ОС Windows, библиотеки ST_Geometry и ST_Raster находятся в папке gislibs:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = svr1.dmn1.com)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) (ENVS="EXTPROC_DLLS=C:\gislibs\st_shapelib.dll;C:\gislibs\libst_raster_ora.dll") ) )
На этим примерах показана строка для серверов Linux или UNIX, на которых библиотеки ST_Geometry и ST_Raster находятся в /arcgis/libs:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = svr1.dmn1.com)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /servit/oracle/product/10.2.0/db_1) (PROGRAM = extproc) (ENVS="EXTPROC_DLLS=/arcgis/libs/libst_shapelib.so:/arcgis/libs/libst_raster_ora.so") ) )
- После изменения и сохранения файла listener.ora перезапустите приемник Oracle.