oracle中dba_segments,5.4.3 数据段信息(DBA_SEGMENTS)(7)

oracle中dba_segments,5.4.3 数据段信息(DBA_SEGMENTS)(7)5 4 3 数据段信息 DBA SEGMENTS 7 提示我们这个表使用的空间数量 以及可以回收的空间数量

5.4.3  数据段信息(DBA_SEGMENTS)(7)

提示我们这个表使用的空间数量,以及可以回收的空间数量。如果空间使用存在问题,则可以查询dba_advisor_recommendations获得Oracle的推荐举措,查询dba_advisor_actions获得Oracle推荐采取的行为。当然更为简单的方式是使用Oracle 10g的Database Control,一切都可以通过图形界面简便快速地进行操作。

如果经过评估HWM的问题已经影响到了性能和存储,那么可以有多种措施来解决HWM的问题。

1.导出/导入与Truncate结合

如果要删除的是表中的所有记录,那么使用Truncate可以降低HWM;但是能使用Truncate的情况并不常见,如果表中剩余的是少量数据,可以通过EXP导出数据或者使用CTAS创建一张临时表,然后Truncate表,再导入或INSERT回数据,即可解决HWM问题。但是这种方法对于不间断服务的数据表并不适合。

2.RENAME+INSERT结合

对于连续使用的数据表,如果数据是以写为主的日志类数据,则可以通过RENAME将数据表更名,然后按原来的结构重建数据表,此时插入操作可以恢复,这个过程非常迅速,对于数据库影响极小,然后可以将RENAME表中的数据插入回来,这就完成了数据整理,HWM可以降低。这种方法适用于写为主的业务类型,不适合增删改查频繁的对象。

3.在线重定义(DBMS_REDEFINITION)

从Oracle 9i开始,Oracle引入了在线重定义新特性,通过DBMS_REDEFINITION包可以对表进行在线重定义,如修改字段名称、增加字段等,当然也可以借用这个包进行空间重整。

在重定义过程中,Oracle通过中间的临时表来记录中间变化数据,完成重定义后可以将数据整合到重定义的表中,数据库的正常操作可以继续进行,这种重组方式和方法2中介绍的过程类似,其原理如图5-10所示。

1bd555d2aa167a340385bbd7f73ff806.png

图5-10  在线重定义示意图

因为数据最终要整合到新的"结果表"中,所以HWM问题可以得到解决。

4.Shrink新特性

不管通过哪一种方法,空间重整一直是一个难题,所以从Oracle 10g开始,Oracle引入了一个新的功能用于支持在线的空间重整,这就是联机段空间回收(Shrinking Database Segments Online)的功能。

联机段收缩仅对ASSM(自动段空间管理)表空间中的表有效,Shrink的本质就是对表执行一系列的DML操作,删除表末端的稀疏行,并在表的顶端重新插入。通过这样的一系列操作,可以填满表段中的"漏洞"空间,逐步将所有剩余空间留在表的末端,然后Oracle可以重置该表的HWM,释放自由空间。由于Shrink是针对数据行进行处理的,在表上会获得行级排他锁,所以并不会影响全表的DML操作,这也是Online的意义所在(但是Shrink可能会产生大量Redo,影响归档量,在操作时需要考虑)。

降低了HWM之后,全表扫描(Full Table Scan)需要扫描的数据块就可以减少,从而性能可以得到提升。图5-11说明了段空间回收的方式:

c121acd46401bf64b83358a44500aceb.png

图5-11  段空间回收由于回收段空间需要移动行数据,数据的ROWID会发生变化,索引会被同时维护,也因此在执行Shrink之前,需要设置表的ENABLE ROW MOVEMENT属性:

alter tableenable row movement;

alter tableshrink space;

【责任编辑:云霞 TEL:(010)】

点赞 0

今天的文章 oracle中dba_segments,5.4.3 数据段信息(DBA_SEGMENTS)(7)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-26 20:51
下一篇 2024-12-26 20:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/96539.html