Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251071
  • 博文数量: 59
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 698
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-19 21:17
文章分类

全部博文(59)

文章存档

2009年(14)

2008年(45)

我的朋友

分类: Oracle

2008-11-22 11:21:19

shrink
    表的收缩语句让你手动收缩表、索引组织表、索引、分区、子分区、物化视图、物化视图日志。收缩语句只是对段的自动管理的对象有用。而段的自动管理的对象一定是在本地管理的表空间中。默认情况下,oracle会压缩段,调整hwm,立即释放可以复原的空间。
    收缩段的空间需要启动对象的row movement属性。另外如果你的系统中有基于rowid的触发器,只执行该语句前应该禁用该触发器。
COMPACT
    如果指定compat,为了接下来的空间释放,oracel只是使用碎片整理程序整理段的空间,使表的行更加的紧凑。数据库并不会理解减低hwm,也不会立即释放空间。我们必须之后执行alter table xx shrink space语句去完成这个操作。该语句如果想使用多步完成shrink操作,而不想一步操作时间过长时非常有用。
    对于索引和索引组织表而言,指定alter index|table .. shrink space compat语句就等同于指定alter index|table coalesce。shrink语句可以指定cascade,可以使使用coalesce的段更加紧凑,这样可以提高性能。但是如果我们不想释放没有使用的空间,我们可以使用coalesce语句。
   
cascade
    如果指定cascade,那么oracle将该表相关联的对象,如索引等一起shrink了,包括索引组织表的二级索引也是如此。
shrink语句的限制:
   1)对簇、簇表、以及任何含有long列的对象无法使用shrink
   2)LOB段不支持shrink,即使对表shrink时指定了cascade语句
   3)对有函数索引的表不至此
   4)即使指定cascade语句,也不会shrink mapping表(映射表),索引组织表的over flow segment.
   5)如果一个是on commit物化视图的主表,那么我们是无法shrink这张表的。如果shrink rowid的物化视图,在shrink之后必须rebuild。
  
 注意:在高可用环境下,要注意使用
alter index|table .. shrink space compat,只是移动了数据的位置,使数据更加的紧凑,但是并不移动hwm,而在这个操作期间,对该表是可以进行dml操作的。alter index|table .. shrink space语句是减低hwm位置。
 
同样的道理:在大表中我们如何去删除一个列呢?
首先我们应该先使该表的列为unused,然后再drop该列。这样也是为了提高该表的可用性。

    
   
 
阅读(1008) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~