Oracle Shrink 索引及表
时间:2010-06-04 来源:evaspring
表
1:普通表
shrink必须开启行迁移功能。
alter table table_name enable row movement ;
保持HWM
alter table table_name shrink space compact;
回缩表与HWM
alter table table_name shrink space;
回缩表与相关索引
alter table table_name shrink space cascade;
回缩索引
alter index index_name shrink space;
Sql脚本
select'alter table '||table_name||' enable row movement;'||chr(10)||'alter table '||table_name||' shrink space;'||chr(10)fromuser_tables;
select'alter index '||index_name||' shrink space;'||chr(10)fromuser_indexes;
2:分区表的处理
进行shrink space时 发生ORA-10631错误.shrink space有一些限制.
在表上建有函数索引(包括全文索引)会失败。
sql脚本
select 'alter table '||segment_name||' modify subpartition '||partition_name||' shrink space;'||chr(10) from user_segments where segment_type='TABLE SUBPARTITION'
脚本
执行方法cmd
C:\cd到放置两个文件的文件夹
Sqlplus username/password@oracle_sid
Sql>@sp.sql
@@sp.sql
set heading off
set feedback off
set term off
set page off
set trimspool on
spool a.log
@a.sql
spool off
@@a.log /*慎重,估计好执行时间再执行,也可以手动执行脚本*/
Exit
@@a.sql
select 'alter table '||table_name||' enable row movement;'||chr(10)||'alter table '||table_name||' shrink space;'||chr(10) from user_tables where table_name ;
select 'alter index '||index_name||' shrink space;'||chr(10) from user_indexes where uniqueness='NONUNIQUE' ;
select 'alter table '||segment_name||' modify subpartition '||partition_name||' shrink space;'||chr(10) from user_segments where segment_type='TABLE SUBPARTITION' ';