上次做实验,我的服务器中既安装了ArcSDE9.3又安装了ArcSDE9.3.1,而且由于测试另外一个问题,我又将ArcSDE9.3.1进行升级到SP2补丁,但是今天测试ST_Geometry的SQL操作,系统提示如下错误:
14:04:25 SQL> select sde.st_astext(t.shape) from AAA.streets t,AAA.str r where sde.st_intersects(t.shape,r.shape)=1; ERROR: ORA-29902: 执行 ODCIIndexStart() 例行程序中出错 ORA-06521: PL/SQL: 映射函数时出错 ORA-06522: Unable to load symbol from DLL ORA-06512: 在 "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 943 ORA-06512: 在 "SDE.SPX_UTIL", line 2901 ORA-06512: 在 "SDE.SPX_UTIL", line 3146 ORA-06512: 在 "SDE.ST_DOMAIN_METHODS", line 291
那么以后遇到类似情况,特别是在比较多的数据库中
我们要查看相关dll版本是否一致,而且是否和数据库的版本是否一致,这时候我们首先查看数据库的版本
C:\Users\Administrator>sqlplus sde/sde@orcl931 SQL*Plus: Release 11.2.0.1.0 Production on 星期二 2月 21 15:03:44 2012 Copyright (c) 1982, 2010, Oracle. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select * from version; MAJOR MINOR BUGFIX ---------- ---------- ---------- DESCRIPTION ------------------------------------------------------------------------------- RELEASE SDESVR_REL_LOW ---------- -------------- 9 3 1 for Oracle11g Build 3056 Fri Sep 10 09:41:17 2010 93005 93001时间为2010年9月10号
那么我们在往存储目录查看这三个dll的修改日期,这样才能保证版本的一致性
所以说我的这个问题的症结所在就是,我的库是2010年9月10日 ArcSDE9.3.1 SP2 的数据库,但是我引用的相关的ST_Geometry的dll(或者说读取user_libraries)里面的路径并不是这个时间的dll,所以出现这个问题。