实验环境
1、oracle 11g
2、 登录用户system
基本概念
收缩段:当一个段被收缩时,段中的数据被压缩,高水线(HWM)下移,并且磁盘空间被释放给包含此段的表空间。段收缩=数据压缩+HWM下移
稀疏填充段:即一个实际使用的空间远小于实际分配给它的空间的段。
行迁移(行移动):收缩表的操作可能会造成表中数据行的ROWID的改变,故在执行一个表的收缩操作之前必须开启这个表的行移动功能。
注:有关高水线的内容可参考另一篇博文。
作用
1、当表空间的空闲空间不足时,可通过收缩段,释放磁盘空间使得表空间的空闲空间增加。
2、当一个对象实际使用的空间比分配给它的空间小得多的时候,可能需要回收那些没有用的磁盘空间。
3、收缩稀疏填充段,有利于全表扫描和DML操作。因为在收缩段后,需要查看的数据块少了。
收缩段的步骤
实验前,查看下测试表ex的情况。
select * from scott.ex;
select blocks from dba_segments where owner='SCOTT' and segment_name='EX';
select num_rows,blocks,empty_blocks from dba_tables where owner='SCOTT' and table_name='EX';
- 高水线=4608,当前水位线=4513,可上升值=95
1、检查行迁移功能是否开启
select num_rows,blocks,empty_blocks,row_movement from dba_tables where owner='SCOTT' and table_name='EX';
- 表ex的行移动功能未开启。
2、开启行移动功能
alter table scott.ex enable row movement;
3、检查行移动功能
select num_rows,blocks,empty_blocks,row_movement from dba_tables where owner='SCOTT' and table_name='EX';
4、收缩段-数据压缩
alter table scott.ex shrink space compact;
5、查看段的数据块使用情况
analyze table scott.ex compute statistics;
select blocks from dba_segments where owner='SCOTT' and segment_name='EX';
select num_rows,blocks,empty_blocks,row_movement from dba_tables where owner='SCOTT' and table_name='EX';
- 该段的数据块使用情况与原来相同,并无变化。
6、收缩段-HWM下移
alter table scott.ex shrink space;
7、查看段的数据块使用情况
analyze table scott.ex compute statistics;
select blocks from dba_segments where owner='SCOTT' and segment_name='EX';
select num_rows,blocks,empty_blocks,row_movement from dba_tables where owner='SCOTT' and table_name='EX';
可以看到, 高水线由原来的4608变为现在的4520,当前水位线无变化,可上升值由95变为7。其中高水线和可上升值下降了相同的数据块个数。由此可见,经过段收缩,ex表的HWM下移了88个数据块,即释放了88个数据块给了ex所在的表空间。
8、关闭行移动功能
alter table scott.ex disable row movement;
select num_rows,blocks,empty_blocks,row_movement from dba_tables where owner='SCOTT' and table_name='EX';
来源:CSDN
作者:熊博主
链接:https://blog.csdn.net/weixin_36522099/article/details/103516852