Oracle11g结合ArcGIS10.2建立空间数据库ST_Geometry类库配置问题

最近笔者用到了空间数据库,按照网上已有教程进行配置和建库后出现了部分关于ST_Geometry类库问题,在查阅资料折腾了调配后终于解决,遂作本文仅供交流参考。

首先利用ArcToolbox中数据管理工具下的“创建企业级地理数据库”功能进行建库,如图1

Oracle11g结合ArcGIS10.2建立空间数据库ST_Geometry类库配置问题_第1张图片

图1

之后进行参数配置,如图2

Oracle11g结合ArcGIS10.2建立空间数据库ST_Geometry类库配置问题_第2张图片

图2

而后确定,根据网上参考的教程完成本部分工作后等待处理完成即可建立其空间数据库且可以向其中加入多种类型的空间数据,如图3。若建立的为普通数据库而非空间数据库则其建立的要素则只有三种,如图4

Oracle11g结合ArcGIS10.2建立空间数据库ST_Geometry类库配置问题_第3张图片Oracle11g结合ArcGIS10.2建立空间数据库ST_Geometry类库配置问题_第4张图片

图3 图4

然而完成后结果依然如图4所示,所以打开地理处理查看是否在处理过程中存在错误,随即在结果的消息下找到错误信息:ST_Geometry 形状库路径可能无效,或者未在 Oracle 实例中正确配置 EXTPROC。 [ (Unable to determine current version of ST_SHAPELIB. Please check the ST_Geometry shape library path on the Oracle server, which is set to "c:\progra~2\arcgis\desktop10.2\DatabaseSupport\Oracle\Windows64\st_shapelib.dll". Refer to the ArcGIS help topics for more details.如图5

Oracle11g结合ArcGIS10.2建立空间数据库ST_Geometry类库配置问题_第5张图片

图5

根据内容可知问题的所在就是ST_Geometry类库没有正确配置,系统在"c:\progra....."路径下找不到st_shapelib.dll文件。找到了问题就可以着手解决,我们可以有两种解决方式:1、将st_shapelib文件复制到相应文件夹下。2、可以将oracle数据库中类库路径进行修改,修改到计算机安装ArcSDE文件夹下,找到dll包位置为路径赋值。消息中提示extproc配置不正确,所以我们还需配置extproc。首先停止lsnrctl服务,打开oracle数据库安装目录找到lisener.ora文件打开,内容如下:

# listener.ora Network Configuration File: D:\app\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.


SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\app\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

需要将 (PROGRAM = extproc)后一行中加入st_shapelib.dll的路径,修改后为:(ENVS = "EXTPROC_DLLS=ONLY:C:\Program Files\ArcGIS\ArcSDE\ora11gexe\bin\st_shapelib.dll")。

其次要对安装目录下的hs/admin中extproc.ora文件进行配置,如本实例中路径为D:\app\product\11.2.0\dbhome_1\hs\admin\extproc.ora将文件内最后一行“SET EXTPROC_DLLS=”改为“SET EXTPROC_DLLS=ANY”。

配置完extproc后,还要在数据库中对与引用类库进行配置,先用sql语句查询当前用户是否存在相应类库引用定义

      select library_name from user_libraries;


结果如图6所示

Oracle11g结合ArcGIS10.2建立空间数据库ST_Geometry类库配置问题_第6张图片

图6

查看没有ST_SHAPELIB名的类库引用定义后,需要定义一个引用,sql语句:

    create or replace library ST_SHAPELIB  
  2  as 'C:\Program Files\ArcGIS\ArcSDE\ora11gexe\bin\st_shapelib.dll';  
  3  /  
完成配置后重启oracle实例与lsnrctl服务,尝试按照上述步骤建库,建立后依然提示相应的问题,而后通过分析发现问题所在。当建立空间数据库时ArcGIS会生成一个新的用户,用户名就是图2中可选定义的表空间名称,而在生成新的用户时ArcGIS会在oracle服务器中自动为用户初始化生成一个ST_Geometry类库引用路径,其值为"c:\progra~2\arcgis\desktop10.2\DatabaseSupport\Oracle\Windows64\st_shapelib.dll"。所以即使你在sys用户下定义了ST_SHAPELIB类库引用也是作用于sys用户,而新生成的用户下会默认按照ArcGIS初始化路径进行调用ST_Geometry方法,建库时依然会出错。所以如果遇到这种情况。应当首先查阅oracle整个系统中ST_SHAPELIB定义情况,sql语句如下:
      SQL> select * from dba_libraries where library_name='ST_SHAPELIB';
若新建的空间数据库用户下的ST_SHAPELIB路径值是ArcGIS默认初始化值,则根据上述步骤在次用户下进行同样处理后再于ArcGIS中添加新建的空间数据库用户的数据库连接,连接后问题即可解决。ST_Geometry库中的空间方法内容都可调用,空间数据库建立成功。(注:ArcGIS默认下一个oracle实例下只能建立一个空间数据库,若最初建立的数据看有问题需要利用sql语句进行用户和表空间所有内容及数据文件的删除
     SQL> SQL> drop user sde cascade;
     SQL> SQL> drop tablespace sde including contents and datafiles;

  end

by cobramonkey

 

你可能感兴趣的:(Oracle+ArcGIS)