日期:2014-05-16  浏览次数:20389 次

alter table move 与shrink space的区别



转自:http://hi.baidu.com/kywinder/blog/item/f96e62d4aa69c82306088b6f.html


案例:

同事将一关键表中删了多余的300w条数据后,程序就变的异常缓慢。分析得出,应该是表空间碎片过多,旧的索引效率过低。

执行下面两句话:


alter table ycsbt_qyygxx_jb move;

alter index R_SBXX_YCSBD_FK rebuild online;

效果非常明显。


deltete不会释放表空间,但是可以重用,也就是插入可以填补空洞,当然现实应用中确实是存在经常删除很少插入的情况,这样就存在了释放表空间优化数据库的可行性了,truncate有不能带条件的缺陷,自然就想到用alter table move重移表空间的方法。这里要注意三个要素

1、??alter table move?省略了tablespace XXX,?表示用户移到自己默认的表空间,因此当前表空间至少要是该表两倍大,这很好理解,由于易错所以提出,就不再细说了。

2、??alter table move过程中会导致索引失效,必须要考虑重新索引

3、??alter table move过程中会产生锁,应该避免在业务高峰期操作!

就第二点和第三点做实验说明如下吧

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0