清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题_木星的博客-程序员宅基地

技术标签: arcsde  

 因为对空间数据管理的不善(非法的删除、重命名等),导致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,可以看到对应的表信息。

sde用户系统表

 

系统表里面记录了每个空间数据的图层名称、空间数据的拥有者,我用arccatalog创建2个图层(tdljx_d,testdltb_mian)时,会在sde系统表中找到对应的信息,如下所示:

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 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lk103852503/article/details/9197737

智能推荐

php 页面输出的三元运算,关于javascript和PHP的三元运算符,输出不同_zero-dot的博客-程序员宅基地

我想通过使用unary if在php中做Fizzbuzz,但输出不是我所期望的,我不明白为什么,所以我将代码复制粘贴到javascript,现在结果是预期的.为什么?$(function(){papa ='Javascript Output: ';for($i=1;$i <= 10; $i++){papa += ($i %5 === 0 && $i %3 === 0) ? '...

分享几套免费漫画字体和卡通字体_weixin_34411563的博客-程序员宅基地

如果你试图让东西看起来优雅而高贵,这些字体是不错的选择。通常这些字体被用来创建卡通和漫画效果,如果你是一名爱好动画的设计师,这些字体是不错的选择 [Download Fonts]Maybe Maybe NotGreen PilowwChicken ButtGretoonDestroyCartoon ReliefMandingoHear...

mysql5.6 64 msi,mysql-5.6.20-winx64.msi安装_热带汽水的博客-程序员宅基地

1,将下载的mysql-5.6.20-winx64.msi安装,一般软件安装过程,选择自定义安装,修改路径(根据情况)2,在my-default.ini中配置如下在[mysqld]下添加如下代码character-set-server=utf8basedir=安装路径(如C:\program\MySQL Server 5.6)datadir=安装路径\dataport=3306character-...

pandas_shiyu_mj的博客-程序员宅基地

创建dataframe对象字典创建import pandas as pdmydataset = { 'sites': ["Google", "Runoob", "Wiki"], 'number': [1, 2, 3]}myvar = pd.DataFrame(mydataset)print(type(myvar))print(myvar)Pandas 数据结构 - SeriesPandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何

福大软工1816 · 第三次作业 - 结对项目1_weixin_30311605的博客-程序员宅基地

031602204 陈加伟 (博客地址:https://www.cnblogs.com/Tony-chenjw/p/9683279.html)031602226 林淇(博客地址:https://www.cnblogs.com/q1093797687/p/9683571.html)pdf文档:https://files.cnblogs.com/files/q1093797687/%E4%BD%9...

HDU2044----一只小蜜蜂_cxyhss的博客-程序员宅基地

Problem Description有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。其中,蜂房的结构如下所示。Input输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。Output对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行...

随便推点

k近邻法及其实现(python)_乘着叶片往前飞的博客-程序员宅基地

k 近邻法的基本思想k 近邻法(k-NN)是一种基本的分类和回归方法。以分类任务为例,k 近邻法假设给定一个训练数据集及其类别标签。分类时,对一个新来的待预测实例,只需要根据离它最近的 k 个训练实例的类别标签,通过多数表决的方式决定待预测实例的类别。算法流程如下:算法3.1(k 近邻法)  输入:训练数据集       T={(x1,y1),(x2,y2),...,(...

Navicat使用教程:接收MySQL/MariaDB问题通知_weixin_34260991的博客-程序员宅基地

下载Navicat Monitor最新版本Navicat Monitor是一套安全、简单而且无代理的远程服务器监控工具。它具有强大的功能使你的监控发挥最大效用。受监控的服务器包括 MySQL、MariaDB 和 Percona Server,并与 Amazon RDS、Amazon Aurora、Oracle Cloud、Microsoft Azure 和阿里云等云数据库兼...

Java面试题(八)网络_豪大大ya的博客-程序员宅基地

79.http 响应码 301 和 302 代表的是什么?有什么区别?80.forward 和 redirect 的区别?81.简述 tcp 和 udp的区别?82.tcp 为什么要三次握手,两次不行吗?为什么?83.说一下 tcp 粘包是怎么产生的?84.OSI 的七层模型都有哪些?85.get 和 post 请求有哪些区别?86.如何实现跨域?87.说一下 JSONP 实现原理?...

通过Node.js解析stl文件_新鑫S的博客-程序员宅基地_解析stl文件

通过Node.js解析stl文件在此之前请确认已安装Node.js,已配置环境变量。如未安装与配置,请查看Node.js安装及环境配置(Windows)一、下载Node项目文件Node项目文件下载链接提取码:hutf二、修改配置文件...

ubuntu16.04安装vs code_海斯特威格林尔摩符奥森维的博客-程序员宅基地

参考链接:https://blog.csdn.net/u010648921/article/details/82624768或https://www.jianshu.com/p/b22cf8256971

蓝桥杯之查找整数-难度:特易(c++实现)_你是刘禹锡的博客-程序员宅基地

上文链接:蓝桥杯之杨辉三角-难度:易(c++实现)资源限制时间限制:1.0s 内存限制:256.0MB问题描述给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。输入格式第一行包含一个整数n。第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。第三行包含一个整数a,为待查找的数。输出格式如果a在数列中出现了,输出它第一次出...