oracle增加列 reorg,ORACLE10G让空间管理变轻松

对于10G之前的的空间管理(表TABLE和索引INDEX)相对其他任务来说是个“PHYSICAL WORKS”。最大的问题就是操作麻烦、时间长且容易出错。

通用的方法基本上就是:EXP/IMP(除非没有业务处理,否则因为时间较长,极容易造成数据的不一致性),ALTER TABLE ...MOVE(容易造成索引不可用,有可能引起前台应用出现错误,且需要额外的表空间)。而对于索引来讲,基本上就是REBUILD来解决了,同时也需要额外的空间。

但是在10G中,对于TABLE和INDEX的空间管理变成了“A PIECE OF CAKE!”

ORACLE提供的SHRINK命令,可以轻松搞定对于DBA来讲是复杂、繁琐又容易出错的重复性劳动。

通过ORACLE自动收集(一般为每小时一次)的信息为基础,我们可以通过多种方法确定哪些表需要进行空间收缩管理。象SEGMENT ADVISOR或使用DBMS_SPACE这样的PL/SQL包来获得信息等等。

此处我们可以通过例如:

select command,attr1,attr2,attr3 from Dba_Advisor_ACTIONS  where COMMAND='SHRINK SPACE';

在此基础上获得的信息,我们可以直接执行SHRINK操作,通过这个命令来达到,释放未使用空间,降低HWM,提高查等性能的目的(尤其是全表扫描 FULL TABLE SCAN)。执行命令如下:

alter index inx_test1 shrink space;

alter table table_shrink_test shrink space;

其中执行完一个对索引的SHINK后,其空间占用由222M直接降到了96M!

多说一句,可以通过dbms_space.space_usage,来计算出表进行SHRINK的基本情况。

通过这样的命令,我们可以不但可以在线执行那些正在被操作的表,并且不需要任何额外的空间。(其实质就是内部执行DELETE和INSERT操作,因为数据本身并没有发生改变,所以只是对数据进行重组REORG,且DML操作不会激发TRIGGER的执行)

值得注意的参数:

我们执行这样一个带有CASCADE的语句时

alter table table_shrink_test shrink space CASCADE;

ORACLE将自动执行所有相依赖对象的SHRINK操作,例如该表相关索引的SHRINK操作。但是需要注意,相关的materialized views,IOT mapping tables,LOB indexes and overflow segments将不会被执行。并且该'ALTER ...SHRINK'命令不但支持简单的堆表(heap tables)和索引,并且还支持 index-organized tables, partitions, subpartitions, materialized views and materialized view log 。

但是,还是要说个但是:

1.这些可以被SHRINK的对象,只能存储在自动空间管理的表空间上(Automatic Segment Space Managed (ASSM))!

2.且被执行SHRINK的表,必须有ROW MOVEMENT的属性。如果没有,可以通过如下命令来修改属性:

alter table table_shrink_test enable row movement;

进步,ORACLE总是在不断进步着 -:)

©著作权归作者所有:来自51CTO博客作者Larry.Yue的原创作品,如需转载,请注明出处,否则将追究法律责任

数据库STORAGETABLEORACLE足迹

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值