ORACLE10G让空间管理变轻松【SPACE MANAGEMENT MAKE EASILY ON ORACLE10G】
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://miracle.blog.51cto.com/255044/56245 |
对于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'; alter index inx_test1 shrink space; alter table table_shrink_test shrink space; 多说一句,可以通过dbms_space.space_usage,来计算出表进行SHRINK的基本情况。 通过这样的命令,我们可以不但可以在线执行那些正在被操作的表,并且不需要任何额外的空间。(其实质就是内部执行DELETE和INSERT操作,因为数据本身并没有发生改变,所以只是对数据进行重组REORG,且DML操作不会激发TRIGGER的执行) 值得注意的参数: 我们执行这样一个带有CASCADE的语句时 alter table table_shrink_test shrink space CASCADE; 但是,还是要说个但是: 1.这些可以被SHRINK的对象,只能存储在自动空间管理的表空间上(Automatic Segment Space Managed (ASSM))! 2.且被执行SHRINK的表,必须有ROW MOVEMENT的属性。如果没有,可以通过如下命令来修改属性: alter table table_shrink_test enable row movement; 进步,ORACLE总是在不断进步着 -:) 本文出自 “Be the miracle!” 博客,请务必保留此出处http://miracle.blog.51cto.com/255044/56245 本文出自 51CTO.COM技术博客 |



Larry.Yue
博客统计信息
热门文章
最新评论
友情链接