truncate
MOVE ALTER TABLE TABLE_NAME MOVE; 1 会锁表 2 move是以block为单位重组数据,行的rowid都会跟着变化,索引会失效,需要重建索引。 3 需要准备两倍的空间。 3 MOVE之后,HWM降低了,空闲块也上去了。
SHRINK SPACE CASCADE ALTER TABLE TABLE_NAME SHRINK SPACE; 在执行该指令之前必须开启行移动。 1 压缩segment,调整hwm,并马上释放空间 2 shrink是以行为单位重组数据,根据复杂算法从逻辑+物理重组数据 3 shrink的算法是从segment的底部开始,移动row到segment的顶部,移动的过程相当于delete/insert操作的组合,在这个过程中会产生大量的undo和redo信息。 4 耗时可能非常长,通常慢于move。 5 对于空间的要求,shrink不需要额外的空间。 ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT; alter table <table_name> shrink space [ <null> | compact | cascade ]; alter table shrink space compact cascade; ALTER TABLE TABLE_NAME DISABLE ROW MOVEMENT; cascade: 缩小表及其索引,并移动高水位线,释放空间,这个参数是在shrink table的时候自动级联索引,相当于rebulid index。 compact: 仅仅是缩小表和索引,并不移动高水位线,不释放空间 加上compact选项仅重新整理segment 空间,并压缩表的记录在以后进行release空间。 但数据库并不调整hwm及释放空间. 为了释放空间.你必须再发布alter table shrink space --compact用于把一个长操作分割为两个较短的操作 如果在业务繁忙时做压缩,可以使用alter table shrink space compact来对表格进行碎片整理,而不调整高水位线,之后再次调用alter table table_name shrink space来释放空间。 也可以使用alter table table_name shrink space cascade来同时对索引都进行收缩,这等同于同时执行alter index idxname shrink space。
exp/imp或expdp/impdp
表重建 create table t2 as select * from t1; drop table t1 purge; rename t2 to t1;
