在 Oracle 中配置 extproc 以访问 ST_Geometry

0
分享 2018-10-30
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jwy0606/ ... 99720
关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。
http://desktop.arcgis.com/zh-c ... c.htm


其实简单总结一下,主要就分为以下几个步骤。
1、安装好ArcMap后,在路径\ArcGIS\Desktop10.6\DatabaseSupport\Oracle\Windows64中找到st_shapelib.dll,并拷贝该文件到数据库服务端。

2、修改数据库服务端的extproc.ora文件,将值改为ANY。

3、使用plsql或者sqlplus查看libraries的路径是否正确。

4、 检查操作系统的包是否满足需求。


下面就每一点简单介绍一下注意事项。
1、首先确定一下你的数据库服务器安装在什么操作系统,Windows还是Linux,以此来决定拷贝的动态库文件是st_shapelib.dll还是libst_shapelib.so。然后很多用户会纠结拷贝该文件到数据库服务端的什么路径下。理论上只要该路径用户有权限可读(linux环境下特别要注意这一点),就可以拷贝过去。一般情况下可以放到ORACLE_HOME的BIN目录下,方便管理和寻找。无论怎样,拷贝过去以后,请记住该路径。
2、在数据库服务器端,Oracle的安装目录下,寻找一个文件 extproc.ora,路径一般为 ORACLE_HOME\hs\admin。打开它,修改其中的值为ANY(见下图)。也可以选择改成 ONLY到具体路径,但一般建议改成ANY,比较方便快捷。




3、数据库中的Libraries对象需要指向本地的st_shapelib.dll或libst_shapelib.so文件。我们可以通过语句
SELECT file_spec

FROM user_libraries

WHERE library_name = 'ST_SHAPELIB';



或者直接在plsql中右键对象来查看(都使用SDE用户查询)。

这一步需要注意路径要正确有效,不要有特殊字符,空格,中文等,并且指向本地的那个st_shapelib.dll或libst_shapelib.so文件,也就是第一步中需要你记住的那个路径。
如果检查出来路径不对,则使用SQL语句
create or replace library ST_SHAPELIB

as '你的路径\st_shapelib.dll';
或者直接在plsql中修改该路径。


4、在帮助文档中,有这样一段话,历来被大家忽略了,但是很重要,如下:
在 Windows 服务器上部署 ST_Geometry 库时,需要使用 Microsoft Visual C++ 2017 Redistributable Package (x64)。如果 Oracle 服务器上没有 Microsoft Visual C++ 2017 SP1 Redistributable Package (x64),可从 Microsoft 网站下载后进行安装。

也就是说st_shapelib.dll这个文件需要使用Microsoft Visual C++组件(注意,每个版本的st_shapelib.dll需要的Microsoft Visual C++不同,此处是ArcGIS 10.6)。
此步骤的解决方法,可参考以下链接。
http://zhihu.esrichina.com.cn/article/2568



至此,关于配置空间SQL的步骤已经介绍完了。在linux环境中配置的方法大致一样。我们可以执行SQL语句来测试是否配置成功。如下语句,若能返回结果,则代表配置成功了。




最后建议不要使用Oracle 11.2.0.1这个版本,因为该版本在调用外部动态库有bug,所以使用的过程中会有些不稳定。
而且ArcGIS 10.2是最后一个支持11.2.0.1的版本。
此后版本的ArcGIS,都需要Oracle11.2.0.1以上(比如Oracle 11.2.0.3,Oracle 11.2.0.4)。

文章来源:http://blog.csdn.net/jwy0606/article/details/80999720

7 个评论

Merry GISmas!
lsh

lsh 回复 GIS知乎

Merry GISmas!
@_@

@_@ 回复 GIS知乎

Merry GISmas!
Merry GISmas!
GIS知乎

GIS知乎 回复 lsh

每个ID只需发现一个彩蛋即可中奖欧!请勿重复回复!
每个ID只需发现一个彩蛋即可中奖欧!请勿重复回复!
GIS知乎

GIS知乎 回复 @_@

每个ID只需发现一个彩蛋即可中奖欧!请勿重复回复!

要回复文章请先登录注册