ORACLE 收缩表(shrink)简介

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;

来源: 

 

 

 

 

 

你可能感兴趣的:(oracle,shrink,oracle,数据库)