在 Oracle 中配置 extproc 以访问 ST_Geometry

Oracle 中,ST_Geometry 的 SQL 函数使用通过 Oracle 外部过程代理(即 extproc)访问 Oracle 的共享库。 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 ServerOracle 安装在同一台计算机上,您可以将 extproc.ora 文件配置为指向 ArcGIS Server 安装目录中的文件。

注:

如果您将 extproc.ora 文件配置为指向 ArcGIS Server 安装目录下的文件,则可以跳过以下准备工作步骤。 但是,在同一台计算机上运行 ArcGIS ServerOracle 可能会由于计算机上的资源争用而导致性能问题。

配置 Oracle extproc 文件之前,请完成以下步骤:

  1. 如果 Oracle 实例无法访问上述 ArcGIS Server 安装位置,请从 My Esri 下载 ST_Geometry 库或将文件从 ArcGIS Server 计算机复制到 Oracle 计算机的目录中。
    注:

    确保下载或复制适合 Oracle 操作系统的库。

    Microsoft Windows 服务器上进行部署时,ST_Geometry 库需要使用 Microsoft Visual C++ Redistributable Package (x64)。 有关所需的软件包版本,请参阅 Oracle 数据库要求。 如果 Oracle 服务器上没有此软件包,可从 Microsoft 站点下载该包并安装。

  2. 运行创建空间类型地理处理工具以启用 Oracle 中的 ST_Geometry、或运行创建企业级地理数据库启用企业级地理数据库地理处理工具以创建地理数据库,这些工具为 ST_SHAPELIB 库设置默认路径。
  3. 以 sde 用户身份从 SQL 客户端连接至 Oracle 实例,然后执行以下 SQL 以确认工具设置的路径与 ST_Geometry 库的位置匹配:

    SELECT file_spec
     FROM user_libraries
     WHERE library_name = 'ST_SHAPELIB';

    如果此操作返回的路径与 ST_Geometry 库文件位置不匹配,则需要在配置 extproc 后重新创建该库。

配置 extproc

Oracle extproc.ora 文件配置为指向 ST_Geometry 库文件位置。

  1. Oracle 服务器上创建 extproc.ora 文件的备份。
  2. 在文本编辑器中打开 extproc.ora 文件并将其改为指向 st_shapelib.dll (Windows) 或 libst_shapelib.soLinux 或 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

  3. 保存并关闭 extproc.ora 文件。

    您可能需要重新启动 Oracle 实例才能识别 extproc.ora 文件中的更改。

  4. 如果您将 ST_Geometry 库文件的默认位置改为其他位置或未对其设置任何位置,请在 Oracle 数据库中创建或重新创建 ST_SHAPELIB 库。

    必须以 sde 用户身份连接到数据库才能创建或重新创建 ST_Geometry 库。

    在本例中,将 ST_SHAPELIB 库设置为 Oracle Windows 服务器上用于放置 st_shapelib.dll 文件的 mylibraries 目录。

    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;

    需要访问库(包括 web 服务)的所有客户端必须重新连接到数据库。

验证 extproc 配置

您可以查询 ST_Geometry 库以确保 extproc 可以访问它。

  1. 登录到 Oracle SQL 客户端。
  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: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 0

    ORA-06512:位于“SDE.ST_GEOMETRY_OPERATORS”,第 68 行”

升级 ST_Geometry 库

如果指向 ArcGIS Server 安装位置,则在安装新版 ArcGIS Server 版本时将收到更新的库。 如果您将这些库放置在其他位置,则必须下载或复制库文件以取得新版库中所包含的修复和改进程序。

Oracle 可能会在更换库或升级 Oracle 实例后将库标记为无效。 当对象被客户端引用时,Oracle 有时会自动重新编译无效的数据库对象,但也有它们不会自动编译的情况。

ST_Geometry 库归 sde 用户所有。 要检查库的状态(以及 sde 用户拥有的所有文件),请以 sde 用户身份登录 SQL 客户端并运行以下语句:

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

如果在无效对象列表中返回了 sde.st_geometry_shapelib_pkg 包正文,请按照上面配置 extproc 部分的步骤 5 中的所述内容重新编译它。

如果多个对象无效,则可以重新编译同一架构中的所有对象。 有关一次重新编译多个对象所需的权限和说明,请参阅 Oracle 文档。