尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

SDE表空间过大分析(STATES,STATE_LINEAGES表过大)

SDE表空间过大分析(STATES,STATE_LINEAGES表过大)
📅 发布时间:2026/6/19 14:59:03

SDE表空间过大分析(STATES,STATE_LINEAGES表过大)

一、环境

ArcGIS10.1   Oracle11G

二、问题描述

在进行数据库巡检时候,发现SDE表空间占用较大(超过40GB),因我们使用的时候SDE表空间没有存储任何用户数据,只有SDE系统表,数据量这么大有些不正常。

三、问题分析

1、检查空间占用情况

SELECT *FROM (SELECT SEGMENT_NAME,SEGMENT_TYPE,ROUND (SUM(BYTES) / 1024 / 1024 ,0) SEGMENT_SIZEFROM (SELECT T.TABLESPACE_NAME,T.SEGMENT_NAME,T.SEGMENT_TYPE,T.BYTESFROM USER_SEGMENTS TWHERE 1 = 1AND T.SEGMENT_TYPE NOT IN('INDEX', 'LOBINDEX', 'LOBSEGMENT')UNION ALLSELECT T.TABLESPACE_NAME,UL.TABLE_NAME AS SEGMENT_NAME,'TABLE' AS SEGMENT_TYPE,T.BYTESFROM USER_SEGMENTS TINNER JOIN USER_LOBS ULON T.SEGMENT_NAME = UL.SEGMENT_NAMEWHERE 1 = 1AND T.SEGMENT_TYPE = 'LOBSEGMENT'UNION ALLSELECT T.TABLESPACE_NAME,UI.TABLE_NAME AS SEGMENT_NAME,'TABLE' AS SEGMENT_TYPE,T.BYTESFROM USER_SEGMENTS TINNER JOIN USER_INDEXES UION T.SEGMENT_NAME = UI.INDEX_NAMEWHERE 1 = 1AND T.SEGMENT_TYPE IN ('INDEX', 'LOBINDEX')AND 1 = 1) TWHERE 1 = 1GROUP BY SEGMENT_NAME, SEGMENT_TYPE) TWHERE 1 = 1ORDER BY SEGMENT_SIZE DESC;

image

可以看到占用较大的是STATE_LINEAGES表,采用SQL语句查看其数据条数,发现数据量到达8亿多条,这明显是不正常的。

注意:当时还发现部分索引占用空间较大,对索引进行重建即可。

select t.TABLE_NAME,t.NUM_ROWS from user_tables t where t.NUM_ROWS is not null order by t.NUM_ROWS desc;

image

2、对STATE_LINEAGES表进行分析

经过查阅相关资料,STATE_LINEAGES表和STATES表主要是负责记录版本编辑的信息(对于版本编辑不熟悉的可以参见一下ArcGIS官方文档,其主要是注册版本后可以多人同时在线编辑)。

但是我们这边没有用到版本,我的库里面也没有注册任何版本,为了避免遗漏,咨询公司DBA通过SQL进行查询:

select owner,table_name from table_registry where bitand(object_flags,power(2,3))>0;

image

查询结果后发现,只有个别图层注册了版本,经过检查,这几个图层所在的表空间已经删除,此些记录也只是遗留下来的脏数据而已,这样可以确定没有注册版本的图层。

3、对STATE_LINEAGES表内数据进行分析

select t.owner,count(*) from states t group by t.owner order by count(*) desc;

image

发现记录均集中在特定的几个用户之中,根据业务分析,这几个用户都是涉及到数据上图的用户;

说明:我们这里对数据的处理都是通过SOE扩展地图服务功能实现数据增删改的,一般只是涉及增加和删除操作。

4、系统以及表清空测试(测试环境)

根据DBA描述,如果没有用到版本编辑,相应的表是可以清空的,我这里进行相关测试

A、通过系统上图功能测试,每次点击保存界址点的时候是会对数据进行删除后再新增(逻辑明显有问题,应该只有界址点发生改变时才触发此操作,测试),在STATE_LINEAGES表中会新增记录;

B、清空STATE_LINEAGES表(注意表有相关联的索引、主键等,为了不破坏相应的关系,建议原表备份删除后进行重建)

我这里因测试环境数据量比较小(注意,这仅仅适用于数据量不大的情况),采用下面语句进行表备份清空:

CREATE TABLE STATES_1 AS SELECT * FROM STATES;
CREATE TABLE STATE_LINEAGES_1  AS SELECT * FROM  STATE_LINEAGES;
DELETE FROM STATES;
DELETE FROM STATE_LINEAGES;

如果要恢复数据,只要通过之前备份的语句重建表之后,将记录插回去即可。

INSERT INTO  STATES SELECT * FROM STATES_1;
INSERT INTO  STATE_LINEAGES SELECT * FROM STATE_LINEAGES_1;

在系统中点击保存时候会报错,通过跟踪ArcGIS Server日志,错误信息如下:

【DeleteData】:删除失败.错误消息:Underlying DBMS error [Error executing stored procedure sde.version_util.insert_state::ORA-06508: PL/SQL: 无法找到正在调用 的程序单元] [SDE.DEFAULT][STATE_ID = 15677]

5、SOE检查,原因明确

通过上免的测试可以发现,基本就是通过SOE进行数据删除的方法有问题了,让开发检查相关语句,是否有版本编辑相关的内容,结果发现在做编辑的时候使用了以下语句:

muWorkspaceEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);

这明显是使用了基于版本的方法,修改成下面的方法并重新编译SOE

muWorkspaceEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMNonVersioned);

四、问题解决与后续跟踪

SOE修改编译后,将现场地图服务所使用的SOE进行全部替换(如果有多个站点使用了此SOE,不要有遗漏);

在后续跟踪STATE_LINEAGES表中数据产生情况

select to_char(t.creation_time,'yyyymmdd'),count(*) from STATES t group by to_char(t.creation_time,'yyyymmdd') order by  to_char(t.creation_time,'yyyymmdd') desc;

image

select to_char(t.creation_time,'yyyymmdd'),t.owner,count(*) from STATES t group by t.owner,to_char(t.creation_time,'yyyymmdd') order by  to_char(t.creation_time,'yyyymmdd') desc;

image

经过跟踪测试,后续的上图以及数据删除等不会再在STATE_LINEAGES表中差生新的记录。

在测试环境下清空STATE_LINEAGES表之后,删除以及上图也不会再有错误,同步使用ArcGIS进行数据编辑、版本注册等操作,验证也没有任何问题,数据表增长的情况得以解决!

至于现在已有的存量数据,可以考虑备份后情况或者记录保留均可以,只要后续不再增长,问题不大!

相关新闻

  • 卓越SAP实施,铸就企业数字核心——哲讯科技,您值得信赖的数字化转型伙伴
  • 增强AI股票预测分析报告 - 2025年10月23日
  • CXF WebService No operation was found with the name

最新新闻

  • 第36章:PagedAttention Kernel 与 KV Cache 内存布局
  • React Native Map Link测试策略:单元测试与集成测试最佳实践
  • (2026新)烟台正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • Jest 实践指南:从零开始搭建你的第一个测试项目(超详细步骤)
  • x265 HEVC编码器:开源视频压缩的革命性工具,如何将文件大小减半
  • C# 读写INI文件:从编码乱码到跨平台兼容的实战指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号