ArcGIS10.2完整安装操作手册-配置ST_Geometry

参考:http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#/na/002n00000091000000/
https://blog.csdn.net/haichao062/article/details/39294909
https://blog.csdn.net/a_dev/article/details/77481876
操作原因:
在 Oracle 中,ST_Geometry 和 ST_Raster 的 SQL 函数使用通过 Oracle 的外部过程代理(即 extproc)访问的共享库。要将 SQL 和 ST_Geometry 或 ST_Raster 配合使用或访问 GDB_ITEMS_VW 和 GDB_ITEMRELATIONSHIPS_VW 视图中的 ArcSDE XML 列,Oracle 必须能够访问这些库。因此,这些库必须存在于 Oracle 服务器上,并且必须通过 Oracle 的外部过程框架调用它们。
在 ArcGIS 中,不设置 Oracle 监听器也可以使用 ST_Geometry 和 ST_Raster。但是,您将不会拥有 ArcGIS 客户端的全部功能,也不会拥有 SQL 客户端的任何功能(如 SQL*Plus)。例如,如果未配置 Oracle 监听器,则无法对 ArcMap 的查询图层中的 ST_Geometry 列使用 SQL 函数、无法识别数据库视图中的要素、无法对包含 ST_Raster 列的表进行版本化,无法删除包括 ST_Raster 列的行,也无法从 SQL 客户端执行 SQL 函数。另外,如果您不配置 Oracle 监听器,则无法通过使用 ST_Geometry 类型作为要素服务的数据库发布数据。
操作步骤
放置libst_shapelib.so
Arcgis下该文件位置,取哪个都可以
Server下:C:\Program Files\ArcGIS\Server\DatabaseSupport\Oracle
Desktop下:C:\Program Files (x86)\ArcGIS\Desktop10.2\DatabaseSupport\Oracle
将该文件放置到ORACLE_HOME/lib下,并且权限设为chmod 777
另外还要注意:将so文件放置到oracle用户的lib路径下无效,必须放置到负责启动监听的用户下的lib路径下。
注意:通过FTP(默认是文本方式)上传so文件时,必须采用binary二进制方式,否则执行insert语句时会报一下错误:

修改extproc.ora(oracle11g下为可选操作)
进入ORACLE_HOME/hs/admin,打开extproc.ora
1. [oracle@redhat6 admin] p w d 2. / h o m e / o r a c l e / a p p / o r a c l e / p r o d u c t / 11.2.0 / d b h o m e 1 / h s / a d m i n 3. [ o r a c l e @ r e d h a t 6 a d m i n ] ls
4. extproc.ora initdg4odbc.ora listener.ora.sample tnsnames.ora.sample
1. # * ANY
2. # When EXTPROC_DLLS=ANY, DLL checking is disabled.
3. #
4. # Syntax: SET EXTPROC_DLLS=ANY
5. #
6. SET EXTPROC_DLLS=
可以看一下文件的相关说明,只需要修改一个地方
SET EXTPROC_DLLS=ANY即可
重启监听(可选操作)即可。(注意,这种方式只针对Oracle11g以上的版本)
创建library ST_SHAPELIB
1.Sde用户下查询select * from user_libraries;
2.create or replace library ST_SHAPELIB as’/oracle2/product/11.2.0/dbhome_1/lib/libst_shapelib.so’; –修改为具体路径
3. alter package sde.st_geometry_shapelib_pkg compile reuse settings;
测试ST_Geometry函数是否正常
select sde.st_astext(sde.st_transform(sde.st_point(‘point(1 1)’, 4326), 4326))from dual;–其中4326为srid值,也可能为2,具体需要查询,查询待补充
insert into a
(OBJECTID, ID, NAME, CITY_ID, COUNTY_ID, TYPECODE, IS_RESERVE, STATUS, STYLE, SCALE, SHAPE)
values(297185, 1054046, ‘测试’, 1, 0, 9503, null, 3, null, null, SDE.ST_POINTFROMTEXT(‘POINT(100 20)’, 4326));

2018年7月3日补充
今晚遇到的情况是,负载的数据库用grid启监听,/u01/app/11.2.0/grid/lib/libst_shapelib.so配置不行,改成/u01/app/11.2.0/oracle/lib/libst_shapelib.so 就可以
其中也参考以下修改了listener.ora,没改tnsname,可能无关
listener.ora修改后部分
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))) # line added by Agent
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLExtProc)
(ORACLE_HOME = /u01/app/11.2.0/grid)
(PROGRAM = extproc)
(ENVS = “EXTPROC_DLLS=ANY”)
)
)

https://blog.csdn.net/a_dev/article/details/77481876

猜你喜欢

转载自blog.csdn.net/yyqjjw/article/details/80178104