Shrinking Database Segments Online 在线收缩数据库段
两个前提条件:
1.需要收缩的表必须enable row movement;
2.所在表空间必须是assm自动分段空间管理;
具体操作步骤如下:
1.select * from dba_tablespaces 确认表空间是否为assm;
2.alter table TD_EMAILQUEUE enable row movement
该步骤会导致引用此表的对象编译无效,需要重新编译相关代码;
3.ALTER TABLE TD_EMAILQUEUE SHRINK SPACE COMPACT
该步骤实际上是delete和insert的过程,产生Row-X (SX)锁,会造成rowid发生变化,需
要停掉基于rowid的触发器;
这时空间已经回收,但是高水位线并没有改变,这是为了尽可能减低对应用的影响;
4.ALTER TABLE TD_EMAILQUEUE SHRINK SPACE
该步骤修改表的高水位线,在业务不忙的时候执行;
第3和第4可以通过ALTER TABLE TD_EMAILQUEUE SHRINK SPACE一条命令实现
补充:
Shrink a table and all of its dependent segments (including LOB segments):
ALTER TABLE employees SHRINK SPACE CASCADE;
Shrink a LOB segment only:
ALTER TABLE employees MODIFY LOB (perf_review) (SHRINK SPACE);