在 Oracle 中配置 extproc 以访问 ST_Geometry
Oracle 中的 ST_Geometry SQL 函数使用 Oracle 通过 Oracle 外部程序代理或 extproc 访问的共享库。 Oracle 外部程序框架需要访问物理 ST_SHAPELIB 库文件,才能执行以下任意操作:
从 SQL 客户端运行 ST_Geometry 函数。
定义一个查询图层,用于在 ST_Geometry 列上运行 SQL 函数。
在 ArcGIS Pro 中查询图格要素图层。
发布 Web 图层,该图层引用 Oracle 数据库中的数据。
使用相交 (DBMS) 选项运行按位置选择图层地理处理工具。
准备工作步骤
为特定操作系统创建 ST_Geometry 库。 登录 My Esri,下载特定于运行 Oracle 的操作系统的库文件以及特定于当前使用的 ArcGIS 客户端版本的库文件。
Oracle 实例必须具有 ST_Geometry 库的访问权限。 将库放在 Oracle 计算机上 Oracle 实例可以访问的目录中。
配置 Oracle extproc 文件之前,请完成以下步骤:
可以从 My Esri 下载 ST_Geometry 库,并将其放置在 Oracle 计算机的目录中。
注:
下载或复制适合 Oracle 操作系统的库。
在 Microsoft Windows 服务器上进行部署时,ST_Geometry 库需要使用 Microsoft Visual C++ Redistributable Package (x64)。 有关所需的软件包版本,请参阅适用于 Oracle 的 ArcGIS 要求。 如果 Oracle 服务器上没有此软件包,可从 Microsoft 站点下载该包并进行安装。
运行创建空间类型地理处理工具以启用 Oracle 中的 ST_Geometry,或运行创建企业级地理数据库或启用企业级地理数据库地理处理工具以创建地理数据库时,这些工具为 ST_SHAPELIB 库设置默认路径。
以 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 库文件位置。 有关 Oracle SQL 语法,请参阅 Oracle 文档。
在 Oracle 服务器上创建
extproc.ora文件的备份。在文本编辑器中打开
extproc.ora文件并将其改为指向st_shapelib.dll(Windows) 或libst_shapelib.so(Linux 或 UNIX)库的位置。保存并关闭
extproc.ora文件。您可能需要重新启动 Oracle 实例才能识别
extproc.ora文件中的更改。如果您将 ST_Geometry 库文件的默认位置改为其他位置或未对其设置任何位置,请在 Oracle 数据库中创建或重新创建 ST_SHAPELIB 库。
必须以 sde 用户身份连接到数据库才能创建或重新创建 ST_Geometry 库。
如果您已重新创建该库,请重新编译
sde.st_geometry_shapelib_pkg包。需要访问库(包括 web 服务)的所有客户端必须重新连接到数据库。
验证 extproc 配置
您可以查询 ST_Geometry 库以确保 extproc 可以访问它。
登录到 Oracle SQL 客户端。
运行以下查询:
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 数据库中的 ST_Geometry 类型时,都必须下载或复制新版本的库文件,才能获取新版本的库中包含的修复和改进。
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 文档。