清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
来源:互联网 发布:跳跃网络账号重设 编辑:程序博客网 时间:2024/05/08 05:58
因为对空间数据管理的不善(非法的删除、重命名等),导致sde中存在一些垃圾数据、和图层名称被占用,这种问题已经有好几个同事问我怎么解决了?现把这个问题已经解决了,下面将整个详细过程写出来,共享给碰到同样问题的网友。
测试环境:
Oracle 10.2.0.2
Arcsde 9.3 for oracle 10gR2
Oracle用户名:test
先用arccatalog在test用户下面建立二个图层,图层名称为:testdljx_d,testdltb_mian
问题一:清除arcsde中的空间垃圾数据
问题缘由:
用oracle管理控制台直接删除空间数据所在的用户(也叫方案),但是在Arcsde还是能看到对应的图层名称,这些图层无法浏览,形成了垃圾信息,并且这些垃圾图层信息无法删除,提示表没有找到,怎么去掉这些垃圾图层信息?
原理说明:
其实Arcsde只是空间数据引擎,只是作为空间数据存取的一个管道而已,不真正存放空间数据,真正的空间数据是存放在底层的关系型数据库中的。如我用arc catalog创建了2个图层,那么用在对应的oracle用户下面中找到对应的二个表。
因为关系型数据库最底层的逻辑实体是二维表,所以一旦直接用底层oracle的管理工具(如:PLSQL、OEM)删除了存放到oracle里面的二维表,那么上层的arcsde就无法存取了。
虽然Arcsde只是一个空间数据存取的管道,但是我们访问空间数据都是通过arcsde的服务来访问的,当然arcsde不是什么都不做,arcsde主要通过自身的系统表来控制对空间数据的访问,就像oracle的system用户一样,系统表存放在oracle的sde用户下面,用sde用户登录到oracle,可以看到对应的表信息。
系统表里面记录了每个空间数据的图层名称、空间数据的拥有者,我用arccatalog创建2个图层(tdljx_d,testdltb_mian)时,会在sde系统表中找到对应的信息,如下所示:
到了这里肯定大家就知道后面怎么解决了。无非不就是删除sde系统表下面的垃圾记录,不就可以解决了,对的。问题是这些垃圾记录存放在sde那些系统表下面呢?
解决过程:
1,用plsql登录到oracle中,删除刚刚建立的二个图层testdljx_d,testdltb_mian,重现问题现象,然后用arctalog浏览这二个图层,发现无法浏览。
2,找出arcsde数据库逻辑关系图,如果安装了arc info,则位置一般为:C:/Program Files/ArcGIS/Documentation/93_sde_diagram.pdf 找到datasets部分就可以清楚知道要删除哪些表的记录了。如果不怕麻烦的话,可以把sde用户下面的系统表一个一个打开,有列中含有“testdljx_d,testdltb_mian”的记录就删除。最后找到了如下表:
TABLE_REGISTRY、column_registry、LAYERS、ALL_ST_GEOMETRY_COLUMNS_V、
GDB_OBJECTCLASSES、GEOMETRY_COLUMNS、gdb_usermetadata、ST_GEOMETRY_COLUMN、ST_GEOMETRY_INDEX、gdb_featuredataset
3,写一个删除的sql或者存储过程都行,如下所示:
delete from sde.GDB_OBJECTCLASSES where owner =upper('test') ;
delete from sde.GEOMETRY_COLUMNS where F_table_schema =upper('test') ;
delete from sde.GEOMETRY_COLUMNS where G_table_schema =upper('test') ;
delete from sde.gdb_usermetadata where owner =upper('test') ;
delete from sde.LAYERS where owner =upper('test') ;
delete from sde.ST_GEOMETRY_INDEX where owner =upper('test') ;
delete from sde.TABLE_REGISTRY where owner =upper('test') ;
delete from sde.column_registry t where t.owner =upper('test') ;
delete from gdb_featuredataset t where t.owner = upper('test') ;
delete from sde.ALL_ST_GEOMETRY_COLUMNS_V where owner =upper('test') ;
delete from sde.ST_GEOMETRY_COLUMNS where owner =upper('test') ;
4,执行SQL,解决问题,用arccatalog再连接,发现test用户下面的所有垃圾图层信息都不见了。
问题二:解决空间数据图层名称已经被占用的问题
问题缘由:
我们在创建空间数据库环境时,在拷贝空间图层时往往发现图层名称被占用,(大部分情况是前面讲的非法删除空间数据造成),而在arccatalog的图层树上面又找不到,如下所示:
又往往建库时要求要用这个图层的名称(如:二次土地调查,建库标准要求地类图斑的图层名称必须为DLTB),这时,怎么解决呢,难道一个图层名称被占用就换一台数据库机器?
原理说明:
参考上面的内容,其实解决这个问题就是删除sde里面的被占用的图层名称而已。
解决办法:
1, 找要删除的表,参考上面的说明。
2,编写要删除的图层的SQL,如下所示:
delete from sde.GDB_OBJECTCLASSES where NAME = upper('testdltb_mian') and owner =upper('test') ;
delete from sde.GEOMETRY_COLUMNS where F_TABLE_NAME =upper('testdltb_mian') and F_table_schema =upper('test') ;
delete from sde.GEOMETRY_COLUMNS where G_TABLE_NAME = upper('testdltb_mian') and G_table_schema =upper('test') ;
delete from sde.gdb_usermetadata where NAME = upper('testdltb_mian') and owner =upper('test') ;
delete from sde.LAYERS where TABLE_NAME = upper('testdltb_mian') and owner =upper('test') ;
delete from sde.ST_GEOMETRY_INDEX where TABLE_NAME = upper('testdltb_mian')and owner =upper('test') ;
delete from sde.TABLE_REGISTRY where TABLE_NAME = upper('testdltb_mian')and owner =upper('test') ;
delete from sde.column_registry t where table_name = upper('testdltb_mian')and t.owner =upper('test') ;
delete from sde.ALL_ST_GEOMETRY_COLUMNS_V where TABLE_NAME = upper('testdltb_mian') and owner =upper('test') ;
delete from sde.ST_GEOMETRY_COLUMNS where TABLE_NAME = upper('testdltb_mian') and owner =upper('test') ;
3,执行sql,解决问题。再次拷贝图层如下所示:
原文地址:http://blog.csdn.net/luowangjun/article/details/4775231
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- 解决ArcSDE图层名被占用的问题
- 解决sde注册看不到空间数据的问题
- 通过ACATALOG 复制SDE空间数据的一些问题
- ArcSDE空间数据库中SDE用户使用
- VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(三)
- VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(二)
- VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(一)
- ArcGIS 10.2导入ArcSDE图层不能编辑的问题
- 向SDE中导入图层数据
- ArcSDE:C#创建SDE要素数据集
- 清除被占用的串口
- 清除被占用的串口
- SDE-----空间数据引擎
- ArcSDE数据转移的问题
- Shell split character line by line
- plist文件读写
- 桌面程序开发之旅
- 思科工业以太网指南
- android 瀑布流效果(仿蘑菇街)
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- CSipSimple--简介
- ubuntu11.10中如何安装 *.so 文件
- 第二章 构造高效且健壮的网络程序(二)
- hdu 1159 common subsuquence
- DLL注入技术之APC注入
- delphi的TJSONArray出错:undeclare identify 'TJSONArray'...
- shell 条件表达式
- Android程序有很多Activity,在B中如何关闭整个Android应用程序,关闭所有的 Activity