安装一台服务器,JAVA、oracle 、arcgis,按部就班,照单抓药,一条龙服务。
但arcgis是10.6的,好高级,没用过,有点儿紧张。就测试了一下 oracle 对空间数据的支持,发现不行。
当然不行,要设置sde表空间的libralies,将st_shapelib.dll指向正确的问题:
首先,从arcgis的安装目录找到st_shapelib.dll,然后修改oracle,指向它。运行语句测试,失败
select sde.ST_AsText(SDE.ST_Geometry('POINT (10 10)', 4326)) from dual;
ORA-28595: Extproc 代理: DLL 路径无效
难道不支持10.6这么高级?拷贝了一个10.3的dll,同样错误。难道路径中含有空格不行(Program Files (x86))?,拷贝到别的目录,也不行。
后来发现,
将st_shapelib.dll拷贝到oracle的安装目录%ORCLE_HOME%\bin\下
,就好了。
网上也有许多教程说要改什么 listener.ora 和 extproc.ora,要我说,这可能暂时解决了当前的问题,但由于修改了系统的默认配置,以后引发其他异常也说不定。遵从默认就好,修改那么多配置,好像系统默认的就不合理一样。
另外,这个st_shapelib.dll,oracle安装完毕之后默认就是指向了%ORCLE_HOME%\bin\st_shapelib.dll,但是这个时候根本不存在这个dll,整个oracle安装目录都找不到这个dll。需要我们从arcgis安装目录中拷贝过来,或者到arcgis官网下载。这也说明,oracle其实并不天然支持arcgis的空间数据,要靠arcgis自己去扩展。
说到这里,我想起导数据(import)。属性数据一切正常,但导到SDE库就不行了,一堆报错,数据是进去了,但没法使用。我看公司的一些文档,说设置各项权限。现在看来,我怀疑是dll的问题。我猜测应该是这样:
1、创建SDE表空间
2、设置SDE的libraries,正确指向st_shapelib.dll
3、导入从其他库中导出的、包含SDE的数据包