shrinking database segment online

oracle 10g开始有了一个新的功能:shrinking database segment online,shrink的本质是对表执行一系列的dml操作,可以
填满表段中的”漏洞空间”,而把所有剩余空间留在表的末端,然后oracle可以重置该表的hwm,释放自由空间。但是有代价的,
会产生大量的redo,需要斟酌。100万行的数据表,可能大概有近200M的redo开销。。

SQL> SELECT SUM(BYTES)/1024/1024 FROM DBA_EXTENTS WHERE SEGMENT_NAME=’TEST’;

SUM(BYTES)/1024/1024
——————–
30

SQL> ALTER TABLE USER.TEST ENABLE ROW MOVEMENT;

表已更改。

SQL> ALTER TABLE USER.TEST SHRINK SPACE;

表已更改。

SQL> SELECT SUM(BYTES)/1024/1024 FROM DBA_EXTENTS WHERE SEGMENT_NAME=’TEST’;

SUM(BYTES)/1024/1024
——————–
29.25
空间占用从30M降到29.25M,看来还是有一定效果的。