一、背景:
1、刚刚进行了Oracle 12C数据库的集群迁移。
迁移前的Oracle环境:Windows Server 2012 R2 Standard 64位。
迁移后的Oracle环境:Linux RedHAT Enterprise 6.8
Oracle的版本没有改变,都是12.1.0.1。
迁移方式:在新环境中创建Oracle 的RAC集群—>将原环境下的数据库利用export工具进行全库逻辑备份—>在新环境下使用Import工具进行全库导入—>给SDE用户赋予以下权限—>重新编译SDE里的所有对象Exec dbms_utility.compile_schema( 'SDE', compile_all => FALSE );
GRANT EXECUTE ON dbms_pipe TO public;
GRANT EXECUTE ON dbms_lock TO public;
GRANT EXECUTE ON dbms_lob TO public;
GRANT EXECUTE ON dbms_utility TO public;
GRANT EXECUTE ON dbms_sql To public;
GRANT EXECUTE ON utl_raw TO public;
二、 问题描述:
Oracle 12C RAC进行数据库迁移后,无法使用客户端工具访问ST_Geometry。在SQL语句中使用SDE.ST_ASTEXT(SHAPE)进行类似查询时,提示ORA-28575错误:无法打开与外部过程代理程序的 RPC 连接。
三、问题分析:
1、在ARCMap中连接SDE企业地理数据库正常,连接其他Schema下的地理数据也正常。
2、ARCMap中导入、导出Oracle的地理数据也正常。
3、连接Oracle数据库的使用Easy Connect连接方式。
4、查询Oracle数据库中使用的ST库的路径:
SELECT file_spec
FROM user_libraries
WHERE library_name = 'ST_SHAPELIB';
查询得到的结果是File_spec中记录的还是原来Windows环境下的st_shapelib.dll的路径。
5、检查现有集群环境的Oracle安装目录中(本例为Linux操作系统,通过查看oracle用户下$oracle_home环境变量查询得到Oracle安装目录)是否存在ST库(windows下为st_shapelib.dll,linux下为libst_shapelib.so),没有找到对应的ST库。
6、由此可以得出在部署新的Oracle集群环境时,没有部署ST_Geometry的访问功能。
四、问题解决
1、从ARCMap或ArcGIS Server的安装路径下,找到Oracle服务器所在环境的ST库。
Windows 上的 ArcGIS Server:<ArcGIS Server installation directory>\ArcGIS\Server\DatabaseSupport\Oracle\Windows64
Linux 上的 ArcGIS Server:<ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/linux64
ArcMap:<ArcMap installation directory>\ArcGIS\Desktop<version>\DatabaseSupport\Oracle\Windows64
2、将ST动态库文件上传至Oracle服务器中。如 O R A C L E H O M E / b i n 。 3 、 在 O r a c l e 数 据 库 中 重 新 创 建 S T S H A P E L I B 库 。 在 本 例 中 , 将 S T S H A P E L I B 库 设 置 为 O r a c l e l i n u x 服 务 器 上 ORACLE_HOME/bin。 3、在 Oracle 数据库中重新创建 ST_SHAPELIB 库。 在本例中,将 ST_SHAPELIB 库设置为 Oracle linux 服务器上 ORACLEHOME/bin。3、在Oracle数据库中重新创建STSHAPELIB库。在本例中,将STSHAPELIB库设置为Oraclelinux服务器上ORACLE_HOME/bin目录下的libst_shapelib.so
CREATE or REPLACE LIBRARY ST_SHAPELIB
AS '\oracle\app\bin\libst_shapelib.so';
4、重新编译 sde.st_geometry_shapelib_pkg 包。
ALTER PACKAGE sde.st_geometry_shapelib_pkg COMPILE
REUSE SETTINGS;
5、重新连接客户端应用。
说明:安装ESRI的官方文档,配置客户端访问ST_Geometry时需要配置extproc文件。在该文件中设置SET EXTPROC_DLLS值为ST库所在文件。在本例中,没有配置extproc文件也访问正常。