Oracle GIS中使用ST_Geometry插入几何数据报错问题咨询
ORA-28595插入ST_Geometry失败但查询正常的问题排查
你的INSERT语句语法本身没有问题,报错的根源是Oracle外部过程代理(extproc)无法定位ST_Geometry依赖的形状库文件。查询语句能正常执行的原因是:读取已存储的几何数据时,多数情况下不需要调用外部库的初始化逻辑;而构造新的ST_Geometry对象(比如用SDE.ST_GEOMETRY()函数创建点)必须依赖外部shape库,这时候extproc找不到正确的DLL路径就会触发ORA-28595错误。
以下是具体排查和解决步骤:
确认shape库文件路径与权限
- Windows环境:找到SDE安装目录下的
shapelib.dll,默认路径一般是C:\arcgis\ArcSDE\ora11g\bin\shapelib.dll(根据Oracle版本和SDE版本调整),确保Oracle运行用户对该文件有读取权限。 - Linux环境:对应文件是
libshapelib.so,默认路径类似/arcgis/ArcSDE/oracle11g/lib/libshapelib.so,同样要保证Oracle用户有读取权限,且该目录已加入Oracle用户的LD_LIBRARY_PATH环境变量。
- Windows环境:找到SDE安装目录下的
检查extproc配置文件
查看Oracle的listener.ora和tnsnames.ora中关于extproc的配置段,确保其中指定的库路径正确无误。例如listener.ora中的配置应该类似:SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:/arcgis/ArcSDE/oracle11g/lib/libshapelib.so") ) )注意
EXTPROC_DLLS参数必须准确指向shape库文件,不能有拼写错误。验证ST_GEOMETRY_SHAPELIB_PKG包的库引用
执行以下SQL查询包体的定义,确认其中的LIBRARY语句指向正确的库文件:SELECT text FROM all_source WHERE name = 'ST_GEOMETRY_SHAPELIB_PKG' AND type = 'PACKAGE BODY';输出内容中应该包含类似
LIBRARY shapelib_lib的定义,而shapelib_lib对应的库路径需要匹配实际文件位置。重启监听与Oracle服务
修改配置文件后,需要重启Oracle监听器和数据库服务,确保配置生效。
内容的提问来源于stack exchange,提问作者satrio wijonarko
相关产品推荐
相关产品推荐

