在 Oracle 中,ST_Geometry 和 ST_Raster 的 SQL 函数使用通过 Oracle 的外部过程代理(即 extproc)访问的共享库。要将 SQL 和 ST_Geometry 或 ST_Raster 配合使用或访问 GDB_ITEMS_VW 和 GDB_ITEMRELATIONSHIPS_VW 视图中的 ArcSDE XML 列,Oracle 必须能够访问这些库。因此,这些库必须存在于 Oracle 服务器上,并且必须通过 Oracle 的外部过程框架调用它们。
在 ArcGIS 中,不设置 Oracle extproc 也可以使用 ST_Geometry 和 ST_Raster。但是,您将不会拥有 ArcGIS 客户端的全部功能,也不会拥有 SQL 客户端的任何功能(如 SQL*Plus)。例如,如果未配置 extproc,则无法对 ArcMap 的查询图层中的 ST_Geometry 列使用 SQL 函数、无法识别数据库视图中的要素、无法对包含 ST_Raster 列的表进行版本化,无法删除包括 ST_Raster 列的行,无法发布包含 ST_Geometry 数据的要素服务,也无法从 SQL 客户端执行 SQL 函数。
注:
如果您的 Oracle 数据库安装在 Windows 服务器上,则您可能需要安装 Microsoft Visual C++ 2008 SP1 Redistributable Package (x64)。如果 Oracle 服务器上没有 Microsoft Visual C++ 2008 SP1 Redistributable Package (x64),则可从 Microsoft 网站下载,然后进行安装。
如果您使用的是 Oracle 11g 或 12c,请编辑 extproc.ora 文件以通过 Oracle 的外部过程框架来调用函数。如果您使用的是 Oracle 10g,请配置 Oracle 监听器。
Oracle 11g 和 12c对于 Oracle 11g 和 12c,Oracle 建议您通过更改 extproc.ora 文件而不是配置监听器来配置 extproc。extproc.ora 文件位于 ORACLE_HOME\hs\admin 目录中。
在 Oracle 服务器上创建 extproc.ora 文件的备份副本。
打开 extproc.ora 文件并将其改为指向 ST_Geometry (st_shapelib) 和/或 ST_Raster 库的位置。
本示例中,已将以下行添加到 Windows 服务器上,以指向名为 mylibraries 的文件夹中的 ST_Geometry 库:
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 服务器上,以指向用户的 esrilibs 目录中的 ST_Geometry 库,此目录在 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 文件。
需要访问库(包括 web 服务)的所有客户端必须重新连接到数据库。
Oracle 10g配置监听器的一个最重要方面是要告知 extproc 在哪里找到共享库。需要修改监听器配置以指定共享库的位置以及重新启动 Oracle 监听器进程,这样配置更改内容才能生效。
本文档涉及两个标准的 Oracle 监听器配置文件:tnsnames.ora 和 listener.ora。这两个文件通常位于 ORACLE_HOME/net/admin。本文档介绍所需的配置设置。
管理设置有多种方法。可用文本编辑器编辑文本文件,使用 Oracle Net Manager,或者使用 Oracle Net Configuration Assistant。Oracle 提供有关如何配置监听器的文档。有关详细信息,请参阅《Oracle 数据库网络服务管理员指南》。
tnsnames.ora 文件包含已知数据库服务的目录。此文件可在本地数据库或远程服务器上定义服务。有一个条目专供本地数据库服务器通过进程间通信 (IPC) 将函数调用发送到 extproc 使用。此条目标注为 EXTPROC_CONNECTION_DATA。可更改此条目下的 Key 和 SID 值。
这些项目用于将该条目链接至 listener.ora 文件中的对应信息。该键的名称可以为任何缩写名称,但它在 listener.ora 文件和 tnsnames.ora 文件中的名称必须一致。这些值区分大小写。仅监听器进程可使用这些值,用户或应用程序不可使用。
listener.ora 文件描述监听器针对请求所监听的某些(不一定是全部)服务。
此文件中可更改的值包括:
SID_LIST_LISTENER
此标注是名为 LISTENER(默认监听器名称)的监听器要处理的 SID 列表的开头。
SID_LIST 和 SID_DESC
标题 SID_LIST 下的 SID_DESC 条目用于定义服务。列表中的第一个条目处理 extproc 请求,第二个条目处理客户端会话。
SID_NAME
其值必须与在文件 tnsnames.ora 中为 extproc 指定的 SID 对应。
ORACLE_HOME
定义此项服务的 Oracle 主页的位置。从此位置下的文件夹加载 extproc 程序文件。
PROGRAM
指定 extproc 可执行文件的文件名。此区分大小写的名称可能是 extproc 或 extproc.exe,具体取决于操作系统的类型。文件位于 ORACLE_HOME/bin。
ENVS