如何解决sde extproc代理DLL路径无效

摘要:访问存储在oracle中的ST_Geometry类型数据的SQL函数通过扩展oracle的externalprocedureagent或者extproc来实现,因此,直接使用这些SQL函数需要配置oracle的listener,让oracle能够找到这些扩展库。如果使用SDE读取这些数据,则不需要配置。

访问存储在oracle中的ST_Geometry类型数据的SQL函数通过扩展oracle的externalprocedureagent或者extproc来实现,因此,直接使用这些SQL函数需要配置oracle的listener,让oracle能够找到这些扩展库。如果使用SDE读取这些数据,则不需要配置。

这些对ST_Geometry类型数据进行操作的函数是用PL/SQL实现的,在PL/SQL中其实是转调的使用c语言编写的外部扩展库(ST_SHAPELIB)。

关于oracle的listener的详细配置方法请参考oracle的相关文档,下面主要介绍一下默认情况下如何配置(windows下面)。

1)找到oracle数据库的安装目录(服务器端),然后定位到oraclehome\NETWORK\ADMIN目录

2)备份listener.ora文件,这点很重要,在对oracle的配置做任何更改的时候都要进行备份

3)打开listener.ora文件,找到(PROGRAM=extproc)这一行,在这行下面添加对ST_SHAPELIB的引用,即指定ST_SHAPELIB的地址,如下:

(ENVS="EXTPROC_DLLS=C:\ProgramFiles\ArcGIS\ArcSDE\ora10gexe\bin\st_shapelib.dll")

其中“C:\ProgramFiles\ArcGIS\ArcSDE\ora10gexe\bin\st_shapelib.dll”为ST_SHAPELIB的物理路径,可以根据安装情况自己修改。

4)保存listener.ora文件,重新启动监听程序。

barry

附录:

未修改前的listener.ora

#listener.oraNetworkConfigurationFile:D:\oracle\product\10.2.0\db_1

\network\admin\listener.ora

#GeneratedbyOracleconfigurationtools.

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=PLSExtProc)

(ORACLE_HOME=D:\oracle\product\10.2.0\db_1)

(PROGRAM=extproc)

)

)

LISTENER=

(DESCRIPTION_LIST=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))

(ADDRESS=(PROTOCOL=TCP)(HOST=zbc)(PORT=1521))

)

)

修改后的listener.ora

#listener.oraNetworkConfigurationFile:D:\oracle\product\10.2.0\db_1

\network\admin\listener.ora

#GeneratedbyOracleconfigurationtools.

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=PLSExtProc)

(ORACLE_HOME=D:\oracle\product\10.2.0\db_1)

(PROGRAM=extproc)

(ENVS="EXTPROC_DLLS=C:\ProgramFiles\ArcGIS\ArcSDE\ora10gexe\bin\st_shapelib.dll")

)

)

LISTENER=

(DESCRIPTION_LIST=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))

(ADDRESS=(PROTOCOL=TCP)(HOST=zbc)(PORT=1521))

)

)

以下是在linux环境下的实际配置:

#listener.oraNetworkConfigurationFile:/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

#GeneratedbyOracleconfigurationtools.

SID_LIST_LISTENER_RAC1=

(SID_LIST=

(SID_DESC=

(SID_NAME=PLSExtProc)

(ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)

(PROGRAM=extproc)

(ENVS="EXTPROC_DLLS=/opt/arcsde/sdeexe93/lib/libst_shapelib.so,LD_LIBRARY_PATH=/opt/arcsde/sdeexe93/lib:/u01/app/oracle/product/10.2.0/db_1/lib")

)

(SID_DESC=

(SID_NAME=yyk1)

(ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)

(GLOBAL_NAME=yyk)

)

)

LISTENER_RAC1=

(DESCRIPTION_LIST=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip.*.org)(PORT=1521))

)

(DESCRIPTION=

(ADDRESS=(PROTOCOL=TCP)(HOST=10.*.*.101)(PORT=1521))

)

(DESCRIPTION=

(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))

)

)

测试:

select*fromuser_libraries;

selectsde.st_srid(shape)fromBS_DIMAO_AR_20W;

selectsde.st_astext(sde.ST_Geometry('POINT(102.1659831336.02395352)',0))asaafromdual;

select*fromst_spatial_references;

select*fromst_geometry_columnst;

selectsde.st_srid(shape)fromBS_XINGZHENG_TEXT;

selectsde.st_astext(sde.ST_Geometry('POINT(102.1659831336.02395352)',0))asaafromdual;

相关推荐