在 Oracle 中,ST_Geometry 的 SQL 函数使用通过 Oracle 外部过程代理(即 extproc)访问 Oracle 的共享库。Oracle 需要访问物理库文件,您才能执行以下任意操作:
- 从 SQL 客户端执行 ST_Geometry SQL 函数。
- 在 GDB_ITEMS_VW 和 GDB_ITEMRELATIONSHIPS_VW 地理数据库系统视图中查询 XML 列。
- 在对 ST_Geometry 列执行 SQL 函数的 ArcMap 或 ArcGIS Pro 中定义查询图层。
- 发布 Web 服务,该服务引用 Oracle 数据库中的数据。
配置 Oracle 外部过程框架调用 ST_Geometry 库才能执行这些任务。
配置 Oracle extproc 之前,请完成以下步骤:
- 如果您的 Oracle 实例无法访问上述 ArcGIS Server 或 ArcMap 安装位置,请从 My Esri 下载 ST_Geometry 库或将文件从 ArcGIS 客户端计算机复制到 Oracle 计算机的目录中。确保复制适合 Oracle 操作系统的库。
- 创建空间类型、创建企业级地理数据库和启用企业级地理数据库地理处理工具可为 ST_SHAPELIB 库设置默认路径。以 sde 用户身份从 SQL 客户端连接至 Oracle 实例,然后执行以下 SQL 以查看当前为 ST_SHAPELIB 库设置的路径:
SELECT file_spec FROM user_libraries WHERE library_name = 'ST_SHAPELIB';
如果此操作返回的路径与 ST_Geometry 库文件位置不匹配,则需要在配置 extproc 后重新创建该库。
将 Oracle extproc.ora 文件配置为指向 ST_Geometry 库文件位置。
- 在 Oracle 服务器上创建 extproc.ora 文件的备份副本。
- 打开 extproc.ora 文件并将其改为指向 st_shapelib.dll (Windows) 或 libst_shapelib.so(Linux 或 UNIX)库的位置。
在本例中,未在 Oracle Windows 服务器上安装 ArcGIS 客户端,因此已将 st_shapelib.dll 复制到 Oracle 计算机中名为 mylibraries 的目录下。已将以下行添加到 extproc.ora 中以指向该目录下的 ST_Geometry 库:
SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll
本示例中,已将以下行添加到 Linux 或 UNIX 服务器上,以指向用户的 esrilibs 目录中的 ST_Geometry 库,此目录在 Oracle 服务器上创建以存储库:
SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so
- 保存并关闭 extproc.ora 文件。
您可能需要重新启动 Oracle 实例才能识别 extproc.ora 文件中的更改。
- 如果您将 ST_Geometry 库文件的默认位置改为其他位置或未对其设置任何位置,请在 Oracle 数据库中创建或重新创建 ST_SHAPELIB 库。
在本例中,将 ST_SHAPELIB 库设置为 Oracle Windows 服务器上用于放置 st_shapelib.dll 文件的 mylibraries 目录。
CREATE or REPLACE LIBRARY ST_SHAPELIB AS 'C:\mylibraries\st_shapelib.dll';
- 如果您已重新创建该库,请重新编译 sde.st_geometry_shapelib_pkg 包。
ALTER PACKAGE sde.st_geometry_shapelib_pkg COMPILE REUSE SETTINGS;
- 需要访问库(包括 web 服务)的所有客户端必须重新连接到数据库。