Oracle shrink space

shrink_clause:
  http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_3001.htm#i2192484

限制条件:
1、不能对cluster、clustered  table 或者任何有LONG列的对象使用这个语句
2、压缩段不支持有函数索引、位图链接索引的表
3、这语句不能压缩二级索引表的映射表,即使设置了CASCADE
4、不能对压缩表使用该语句
5、不能压缩on commit 类型的物化视图的主表,rowid物化视图必须在压缩操作之后重建

详解:
oracle10g开始提供shrink的命令,要求表空间是自动段空间管理(ASSM),降低HWM。

segment shrink 分为两个阶段:

1、数据重组(compact):通过一系列insert、delete操作,将数据尽量排在段的前面,这个过程中需要在表上加RX锁,及只需要移动的行上加锁。由于涉及到rowid的改变,需要enable row movement。同时要distable基于rowid的triggers,这个过程对业务影响比较小(--由于采用compact,只有涉及移动的行才加锁,所以不会锁定整个表,其他的DML操作有部分可以进行,进而减小系统高峰期的性能开销)

2、HWM调整:第二阶段是调整HWM位置,释放空闲数据块,此过程需要在表上加X锁(独享锁,因此这个表都被锁定,如果系统处在高峰期的时候,其他在此表的DML被挂起,会产生严重阻塞),会造成表上所有DML语句阻塞,系统忙时影响较大,

  • shrink space语句两个阶段都执行
  • shrink space compact语句只执行第一个阶段。
  • 在业务繁忙的时候,可以先执行shrink space compact重组数据,然后不满的时候执行shrink space降低HWM释放空闲数据块。
  • shrink必须开启对象的row movement功能(shrink index 不需要),alter table table_name enable row movement.但是要注意,该语句会造成引用table_name的对象(如存储过程、包、试图等)变为无效,执行完最好由utlrp.sql来编译无效对象。
  • shrink不会使表的索引失效。但是move会,因此,move后必须重建索引,(alter table table_name move;alter index index_name rebuild)

语法:
alter table shrink space[|cpmpact|cascade];
alter table shrink space compcat; 把块中的数据堆到一起,但会保持high water mark
alter table shrink space;收缩表,降低high water mark
alter table shrink space cascade;收缩表,降低high water mark,并相关索引也要收缩。
alter index indexname shrink space;收缩索引

补充:
--编译无效对象脚本utlrp.sql

  >$ sqlplus /no log
    SQL>connect sys/pwd@sid AS sysdba
    SQL>@?/rdbms/admin/utlrp.sql

  utlrp.sql脚本可以在数据库运行的状态下执行以编译、数据库中的invalid对象.
  oracle建议在对数据库进行迁移、升级、降级后都运行一遍utlrp.sql以编译无效对象。

--打完patch后重建数据字典视图脚本catpatch.sql

  为了保证系统的的数据词典的完整性和有效性,最好的打patch后在migrate状态下运行catpatch.sql
  sql> shutdown immediate
  sql> startup migrate
  sql> @?/rdbms/admin/catpatch.sql
  sql> shutdown immediate
  sql> startup

  为加快速度,可临时调大这2个参数:
  show parameter shared_pool_size
  show parameter large_pool_size

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/557324/viewspace-1259632/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/557324/viewspace-1259632/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值