因为对空间数据管理的不善(非法的删除、重命名等),导致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,解决问题。再次拷贝图层如下所示:

感谢:

感谢同事杜海军帮忙用存储过程找出一张隐含的表ALL_ST_GEOMETRY_COLUMNS_V,才保证上面的工作得以顺利完成,谢谢兄弟!

原文:http://blog.csdn.net/luowangjun/article/details/4775231

转:清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题的更多相关文章

  1. 向SDE图层中添加大量数据时,出现ORA-00604以及ORA-01000的解决办法

    转自原文 向SDE图层中添加大量数据时,出现ORA-00604以及ORA-01000的解决办法 写了一个小程序,从一个列表中读取坐标串,每个坐标串生成一个IPolygon,然后将这些Polygon添加 ...

  2. C# DataGridView控件清空数据完美解决方法

    C# DataGridView控件绑定数据后清空数据在清除DataGridview的数据时: 1.DataSource为NULL(DataGridView.DataSource= null;)这样会将 ...

  3. 转:C# DataGridView控件清空数据出错解决方法

    C# DataGridView控件绑定数据后清空数据在清除DataGridview的数据时: 1.DataSource为NULL(DataGridView.DataSource= null;)这样会将 ...

  4. ArcGIS Engine连接ArcSDE SQL Server(获得所有SDE图层)

    ArcSDE是ESRI公司推出的基于SDE技术的空间数据库解决方案,它是在现有的关系或对象关系型数据库管理系统的基础上进行应用扩展,可以将空间数据和非空间数据存储在目前绝大多数商用DBMS中,享受商用 ...

  5. 爬虫爬数据时,post数据乱码解决办法

    最近在写一个爬虫,目标网站是:http://zx.bjmemc.com.cn/,可能是为了防止被爬取数据,它给自身数据加了密.用谷歌自带的抓包工具也不能捕获到数据.于是下了Fiddler.     F ...

  6. 数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题

    数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据.解决图片恢复后打不开的问题. 用过非常多数据恢复软件.最早EasyRecovery pro.恢复过U盘.手机SD卡,硬盘数据.但如今下载不了最新版 ...

  7. 前端笔记之服务器&Ajax(下)数据请求&解决跨域&三级联动&session&堆栈

    一.请求后端的JSON数据 JSON是前后端通信的交互格式,JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. JSON是互联网各个后台与 ...

  8. SQLServerException:将截断字符串或二进制数据的解决方法

    SQLServerException:将截断字符串或二进制数据的解决方法: 最近使用JPA进行保存对象到数据库中怎么也添加不进去,始终报错 主要原因就是你增加的数据字段长度超过数据库中字段所定义长度, ...

  9. HTTP 错误 500.19 请求的页面的相关配置数据无效 解决办法

    "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法   HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该 ...

随机推荐

  1. P2105 K皇后

    题意:$n*m$棋盘放置k个皇后,问几个格子不被攻击 1≤n,m≤20000,1≤k≤500 开set判重暴力$O(n*k)$然而,setMLE了QAQ 正解确实是$O(n*k)$的 以hang[i] ...

  2. liunx一次安装多个软件包

    https://blog.csdn.net/finded/article/details/44955953 编写shell脚本程序 一次安装多个软件,主要用于一些软件依赖环境配置. 1.shell脚本 ...

  3. Job for postfix.service failed because the control process exited with error code. See "systemctl status postfix.service" and "journalctl -xe" for details.

    这是因为防火墙或者配置文件导致,无法启动的邮件服务!! 首先关闭防火墙! 修改配置文件 vim /etc/postfix/main.cf inet_protocols = ipv4 inet_inte ...

  4. linux curl命令:curl: (7) couldn't connect to host ?

    linux curl命令:curl: (7) couldn't connect to host ? 使用linux命令 curl http://www.test.com 出现如下错误:curl: (7 ...

  5. Hdu 5862 Counting Intersections(有n条线段,每一条线段都是平行于x轴或者y轴,问有多少个交点+树状数组区间求和单点跟新)

    传送门:Hdu 5862 Counting Intersections 题意:有n条线段,每一条线段都是平行于x轴或者y轴,问有多少个交点 分析: 基本的操作流程是:先将所有的线段按照横树坐标x按小的 ...

  6. 6.过滤器(Filter)

    ---恢复内容开始--- 1.过滤器简介: 过滤器是一个用于拦截在数据源和数据目的地之间消息的一个对象. 过滤器 功能: 分析请求,将请求发送给指定的资源或自己创建一个响应返回:在请求到达服务器端前处 ...

  7. HIVE sql取中文

    select regexp_replace(str,'[^\\u4e00-\\u9fa5]','') as str1 from ( select 'test测试test' as str ) t ;

  8. sofa-boot(1)helloworld项目

    本示例参考:https://www.sofastack.tech/sofa-boot/docs/QuickStart 示例采用sofa-boot 3.1.1版本. 如下步骤: 1.进入https:// ...

  9. 对称加密中的ECB模式&CBC模式

    ECB模式: CBC模式: 所有的迭代模式:

  10. QQ号_保存_20180124

    1.1337978907 (密码:33+我的名字全小写全部拼音) 2. 3. 4. 5.