shrink
表的收缩语句让你手动收缩表、索引组织表、索引、分区、子分区、物化视图、物化视图日志。收缩语句只是对段的自动管理的对象有用。而段的自动管理的对象一定是在本地管理的表空间中。默认情况下,oracle会压缩段,调整hwm,立即释放可以复原的空间。
收缩段的空间需要启动对象的row movement属性。另外如果你的系统中有基于rowid的触发器,只执行该语句前应该禁用该触发器。
COMPACT
如果指定compat,为了接下来的空间释放,oracel只是使用碎片整理程序整理段的空间,使表的行更加的紧凑。数据库并不会理解减低hwm,也不会立即释放空间。我们必须之后执行alter table xx shrink space语句去完成这个操作。该语句如果想使用多步完成shrink操作,而不想一步操作时间过长时非常有用。
对于索引和索引组织表而言,指定alter index|table .. shrink space compat语句就等同于指定alter index|table coalesce。shrink语句可以指定cascade,可以使使用coalesce的段更加紧凑,这样可以提高性能。但是如果我们不想释放没有使用的空间,我们可以使用coalesce语句。
cascade
如果指定cascade,那么oracle将该表相关联的对象,如索引等一起shrink了,包括索引组织表的二级索引也是如此。
shrink语句的限制:
1)对簇、簇表、以及任何含有long列的对象无法使用shrink
2)LOB段不支持shrink,即使对表shrink时指定了cascade语句
3)对有函数索引的表不至此
4)即使指定cascade语句,也不会shrink mapping表(映射表),索引组织表的over flow segment.
5)如果一个是on commit物化视图的主表,那么我们是无法shrink这张表的。如果shrink rowid的物化视图,在shrink之后必须rebuild。
注意:在高可用环境下,要注意使用
alter index|table .. shrink space compat,只是移动了数据的位置,使数据更加的紧凑,但是并不移动hwm,而在这个操作期间,对该表是可以进行dml操作的。alter index|table .. shrink space语句是减低hwm位置。
同样的道理:在大表中我们如何去删除一个列呢?
首先我们应该先使该表的列为unused,然后再drop该列。这样也是为了提高该表的可用性。
阅读(1039) | 评论(0) | 转发(0) |