以下是 Oracle 数据库中三个收缩表空间命令的对比:
1. ALTER TABLE table_name SHRINK SPACE;
作用:直接重组表数据并移动高水位线(HWM),释放未使用的空间到表空间。
影响:
会锁表(DDL操作),但时间较短。
索引需单独维护,除非使用CASCADE
参数。
适用场景:需要立即释放空间并降低HWM的情况。
2. ALTER TABLE table_name SHRINK SPACE CASCADE;
作用:在收缩表的同时,自动收缩其依赖的索引、LOB等对象,并移动HWM。
影响:
对表和索引均会产生短暂锁,可能影响业务。
自动维护索引有效性,避免手动重建。
适用场景:需同步回收表和索引碎片时。
3. ALTER TABLE table_name SHRINK SPACE COMPACT;
作用:仅重组数据块(消除碎片),但不移动HWM,因此不会立即释放空间到表空间。
影响:
分阶段操作,后续需再次执行不带COMPACT
的命令释放空间。
对业务影响较小,仅短暂锁定行。
适用场景:业务高峰期需减少锁冲突,先整理数据,维护窗口再释放空间。
4. ALTER TABLE MOVE
的差别
作用:
将表中的数据物理移动到新的位置(同一表空间内或跨表空间)。
重置高水位线(HWM):释放未使用的空间,降低表的逻辑存储上限。
支持移动表到新的表空间(如迁移存储)。
可结合表压缩(例如,MOVE COMPRESS
)。
业务影响:
MOVE
操作会锁定表,导致 DML 操作阻塞,建议在维护窗口执行。
大表操作可能耗时较长,需评估存储空间(移动时需要额外空间)
适用场景:
表所在的表空间不支持自动段空间管理(ASSM)(此时无法使用 SHRINK
)。
需要将表迁移到其他表空间(如优化存储性能)。
需要彻底重组表数据并降低 HWM(比SHRINK
更彻底)
shrink space区别总结: