创建SDE企业级数据库报错——ST_Geometry 形状库路径可能无效

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

图1

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


图2

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


图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")。

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

[sql]  view plain  copy
  1. select library_name from user_libraries;  


结果如图6所示


图6

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

[sql]  view plain  copy
  1.   create or replace library ST_SHAPELIB    
  2. 2  as 'C:\Program Files\ArcGIS\ArcSDE\ora11gexe\bin\st_shapelib.dll';    
  3. 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]  view plain  copy
  1. SQL> select * from dba_libraries where library_name='ST_SHAPELIB';  
若新建的空间数据库用户下的ST_SHAPELIB路径值是ArcGIS默认初始化值,则根据上述步骤在次用户下进行同样处理后再于ArcGIS中添加新建的空间数据库用户的数据库连接,连接后问题即可解决。ST_Geometry库中的空间方法内容都可调用,空间数据库建立成功。(注:ArcGIS默认下一个oracle实例下只能建立一个空间数据库,若最初建立的数据看有问题需要利用sql语句进行用户和表空间所有内容及数据文件的删除
[sql]  view plain  copy
  1. SQL> SQL> drop user sde cascade;  
[sql]  view plain  copy
  1. SQL> SQL> drop tablespace sde including contents and datafiles;  
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在关系型数据库,可以使用SQL命令查询sde的表别名。具体来说,可以使用以下步骤在数据库找到sde的表别名: 1. 登录到数据库,使用具有查询元数据权限的用户。 2. 切换到sde,使用以下命令(针对不同的数据库系统,可能有所不同):`USE sde;` 或 `USE database_name;`,其database_name是包含sde数据库名称。 3. 查询表别名,可以使用以下命令(针对不同的数据库系统,可能有所不同): - 对于SQL Server:`SELECT name AS table_name, object_name(object_id) AS table_alias FROM sys.tables WHERE name LIKE '%sde%';` - 对于Oracle:`SELECT table_name, table_alias FROM all_tables WHERE owner = 'SDE' AND table_name LIKE '%SDE%';` - 对于MySQL:`SELECT table_name, table_alias FROM information_schema.tables WHERE table_schema = 'sde' AND table_name LIKE '%sde%';` - 对于PostgreSQL:`SELECT table_name, table_alias FROM pg_catalog.pg_tables WHERE schemaname = 'sde' AND table_name LIKE '%sde%';` 4. 在输出结果,您可以看到表名和其别名(如果有)。如果别名为空,则表名就是其默认别名。 请注意,SDE是Esri ArcSDE数据库,它使用了一些特殊的表和视图来管理空间数据。因此,如果您正在查找SDE的空间表别名,可以尝试使用以下命令(针对不同的数据库系统,可能有所不同): - 对于SQL Server:`SELECT name AS table_name, object_name(object_id) AS table_alias FROM sys.tables WHERE name LIKE 'st_%';` - 对于Oracle:`SELECT table_name, table_alias FROM all_tables WHERE owner = 'SDE' AND table_name LIKE 'ST_%';` - 对于MySQL:`SELECT table_name, table_alias FROM information_schema.tables WHERE table_schema = 'sde' AND table_name LIKE 'st_%';` - 对于PostgreSQL:`SELECT table_name, table_alias FROM pg_catalog.pg_tables WHERE schemaname = 'sde' AND table_name LIKE 'st_%';`

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值