失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > oracle中dba_segments 5.4.3 数据段信息(DBA_SEGMENTS)(7)

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

时间:2019-04-08 12:07:04

相关推荐

oracle中dba_segments 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所示。

图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说明了段空间回收的方式:

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

altertableenablerowmovement;

altertableshrinkspace;

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

点赞 0

如果觉得《oracle中dba_segments 5.4.3 数据段信息(DBA_SEGMENTS)(7)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。