欢迎来到天天文库
浏览记录
ID:1326908
大小:317.52 KB
页数:8页
时间:2017-11-10
《清除sde空间垃圾数据》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题分类:GIS相关2009-11-0610:022262人阅读评论(4)收藏举报deleteoracletableschema数据库sql因为对空间数据管理的不善(非法的删除、重命名等),导致sde中存在一些垃圾数据、和图层名称被占用,这种问题已经有好几个同事问我怎么解决了?现把这个问题已经解决了,下面将整个详细过程写出来,共享给碰到同样问题的网友。测试环境:Oracle10.2.0.2Arcsde9.3fororacle10gR2Oracle用户名:test先用arccatalog
2、在test用户下面建立二个图层,图层名称为:testdljx_d,testdltb_mian问题一:清除arcsde中的空间垃圾数据问题缘由:用oracle管理控制台直接删除空间数据所在的用户(也叫方案),但是在Arcsde还是能看到对应的图层名称,这些图层无法浏览,形成了垃圾信息,并且这些垃圾图层信息无法删除,提示表没有找到,怎么去掉这些垃圾图层信息?原理说明:其实Arcsde只是空间数据引擎,只是作为空间数据存取的一个管道而已,不真正存放空间数据,真正的空间数据是存放在底层的关系型数据库中的。如我用arccatalog创建了2个图层,那么
3、用在对应的oracle用户下面中找到对应的二个表。因为关系型数据库最底层的逻辑实体是二维表,所以一旦直接用底层oracle的管理工具(如:PLSQL、OEM)删除了存放到oracle里面的二维表,那么上层的arcsde就无法存取了。虽然Arcsde只是一个空间数据存取的管道,但是我们访问空间数据都是通过arcsde的服务来访问的,当然arcsde不是什么都不做,arcsde主要通过自身的系统表来控制对空间数据的访问,就像oracle的system用户一样,系统表存放在oracle的sde用户下面,用sde用户登录到oracle,可以看到对应的
4、表信息。系统表里面记录了每个空间数据的图层名称、空间数据的拥有者,我用arccatalog创建2个图层(tdljx_d,testdltb_mian)时,会在sde系统表中找到对应的信息,如下所示:到了这里肯定大家就知道后面怎么解决了。无非不就是删除sde系统表下面的垃圾记录,不就可以解决了,对的。问题是这些垃圾记录存放在sde那些系统表下面呢?解决过程:1,用plsql登录到oracle中,删除刚刚建立的二个图层testdljx_d,testdltb_mian,重现问题现象,然后用arctalog浏览这二个图层,发现无法浏览。2,找出arcs
5、de数据库逻辑关系图,如果安装了arcinfo,则位置一般为:C:/ProgramFiles/ArcGIS/Documentation/93_sde_diagram.pdf找到datasets部分就可以清楚知道要删除哪些表的记录了。如果不怕麻烦的话,可以把sde用户下面的系统表一个一个打开,有列中含有“testdljx_d,testdltb_mian”的记录就删除。最后找到了如下表:TABLE_REGISTRY、column_registry、LAYERS、ALL_ST_GEOMETRY_COLUMNS_V、GDB_OBJECTCLASSES
6、、GEOMETRY_COLUMNS、gdb_usermetadata、ST_GEOMETRY_COLUMN、ST_GEOMETRY_INDEX、gdb_featuredataset3,写一个删除的sql或者存储过程都行,如下所示:deletefromsde.GDB_OBJECTCLASSESwhereowner=upper('test');deletefromsde.GEOMETRY_COLUMNSwhereF_table_schema=upper('test');deletefromsde.GEOMETRY_COLUMNSwhereG_ta
7、ble_schema=upper('test');deletefromsde.gdb_usermetadatawhereowner=upper('test');deletefromsde.LAYERSwhereowner=upper('test');deletefromsde.ST_GEOMETRY_INDEXwhereowner=upper('test');deletefromsde.TABLE_REGISTRYwhereowner=upper('test');deletefromsde.column_registrytwheret.own
8、er=upper('test');deletefromgdb_featuredatasettwheret.owner=upper('test');deletefro
此文档下载收益归作者所有