oracle 表碎片太多的处理办法

前端之家收集整理的这篇文章主要介绍了oracle 表碎片太多的处理办法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转自点击打开链接@H_404_3@@H_404_3@


@H_404_3@@H_404_3@

某张结果表在etl过程中频繁的被dml语句操作,导致整个表的碎片激增。原来7g多的空间经过一段时间的运行增长至80g。。。。。汗@H_404_3@@H_404_3@

通过move的方式来解决该办法,在网上搜罗了一些操作说明,供参考@H_404_3@
一、碎片程度查看@H_404_3@
在没有toad的情况下可以通过如下语句:@H_404_3@
select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name@H_404_3@
having count(tablespace_name)>10;@H_404_3@
alter tablespace name coalesce;@H_404_3@
alter table name deallocate unused;@H_404_3@
create or replace view ts_blocks_v as@H_404_3@
404_3@
union all@H_404_3@
404_3@
select * from ts_blocks_v;@H_404_3@
404_3@
group by tablespace_name;@H_404_3@
二、查看碎片程度高的表@H_404_3@
SELECT segment_name table_name,COUNT(*) extents@H_404_3@
FROM dba_segments WHERE owner NOT IN ('SYS','SYSTEM') GROUP BY segment_name@H_404_3@
HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);@H_404_3@
三、解决方法@H_404_3@
If you have to rebuild a table,always consider the 'move' command first.Availability can be reduced,but the benefit to administrative safty and convenience is large.There are no windows of opportunity for data to go missing.----Jonathan Lewis.@H_404_3@
如果必须要重建表,alter table ...move tablespace...绝对是第一选择,理由如下:@H_404_3@
1 对于大表move时,对此表的查询不受影响,只有在move操作完成的瞬间受影响。DML操作受影响。@H_404_3@
2 index结构不受影响,只需move完成后rebuild。@H_404_3@
3 与其它对象依赖关系不受影响,操作前不必为对象间的依赖关系操心。@H_404_3@
4 move操作可以parallel。@H_404_3@
5 NOLOGGING选项对move操作有作用,可大大加快重建速度。如果要move的表是nologging的,则不需指定。@H_404_3@
基于以上理由,move是rebuild table的最佳选择,应该优先考虑,大家可以对照以上优点考虑一下用exp/imp的优缺点。采取的策略根据实际需求的不同而不同@H_404_3@
@H_404_3@

猜你在找的Oracle相关文章