shrink命令用于收缩表,降低高水位线,减少表所使用的块的个数.
特性:
1)可在线收缩表,基本不影响DML
2)收缩表的同时自动维护索引
3)不需要额外的磁盘空间
shrink同时全减少高水位线以上和以下未使用的空间.数据库会压缩段(表),将水位线降低到合适的位置,然后释放回收的空间.
shrink命令需要开启row movement,因为在收缩表时,行的位置可能改变.
shrinK命令只能用在自动管理的段空间(automatic segment space mangement)的表空间上.
以下段不支持shrink命令:
1)IOT mapping 表(?)
2)rowid创建的物化视图的基表
3)表上的函数索引
4)securefile lobs
5)压缩表
shrink命令有两种执行方式:
1)直接执行alter table shirnk space;
2)先执行alter table shirnk space compact; 再执行alter table shirnk space.
alter table shirnk space 会直接整理块碎片压缩表并重置高水位线.
compact的作用是整理块碎片并压缩表,然后把压缩后的信息写在磁盘上,再次执行alter table shirnk space时, 重置高水位线并释放回收的空间.这样做的好处是避免大量锁定对大事务产生影响.
在执行shrink命令时加上cascade,会同时收缩表相关的对象,如索引.
例子:
Shrink a table and all of its dependent segments (including BASICFILE
LOB segments):
ALTER TABLE employees SHRINK SPACE CASCADE;
Shrink a BASICFILE
LOB segment only:
ALTER TABLE employees MODIFY LOB (perf_review) (SHRINK SPACE);
Shrink a single partition of a partitioned table:
ALTER TABLE customers MODIFY PARTITION cust_P1 SHRINK SPACE;
Shrink an IOT index segment and the overflow segment:
ALTER TABLE cities SHRINK SPACE CASCADE;
Shrink an IOT overflow segment only:
ALTER TABLE cities OVERFLOW SHRINK SPACE;
来源: