自动重建失效普通索引和分区索引



只为了做的更好
创建一个JOB调度下面过程就可以自动把失效索引重建

create or replace procedure re_index Authid Current_User is


   name_index varchar2(50);
   v_sql_reInd varchar2(1000);
   v_sql_reInd2 varchar2(1000);

   --ind_par varchar2(2000);




--cursor all_index(name varchar2) is select b.index_name from user_indexes a,user_ind_partitions b where a.INDEX_NAME=b.index_name and b.status='UNUSABLE' and b.index_name=name;
cursor all_index(name varchar2) is select b.index_name,b.partition_name,c.locality from user_indexes a,user_ind_partitions b,user_part_indexes c where a.INDEX_NAME=b.index_name and a.table_name=c.table_name and b.status='UNUSABLE' and b.index_name=name;


type par_ind is record(new_name varchar2(20),par_name varchar2(20),loc varchar2(50));
ind_par par_ind;

 cursor index_test is select a.index_name,a.status from user_indexes a where /*a.table_name= 'T_MXQ_L' and*/ a.status='UNUSABLE' or a.status='N/A';
type user_ind is record(name_in varchar2(20),stat_in varchar2(20));
all_ind user_ind;
begin


for all_ind in index_test  loop

   case all_ind.status

   when 'UNUSABLE' then

     v_sql_reInd := 'alter index ' || all_ind.index_name || ' rebuild online ';

    execute immediate (v_sql_reInd);


       --log_err('re_index'||all_ind.index_name || ' 重建成功 ');
   when 'N/A' then
     name_index:=all_ind.index_name;
    for ind_par in all_index(name_index) loop
      case ind_par.locality
        when 'LOCAL' then
   v_sql_reInd := 'alter index ' || ind_par.index_name || ' rebuild partition '||ind_par.partition_name ||' online ';
--alter index i_id_global rebuild partition p1 online nologging;
   execute immediate (v_sql_reInd);
        else
           v_sql_reInd := 'alter index ' || ind_par.index_name || ' rebuild online ';

   execute immediate (v_sql_reInd);
        end case;
       --log_err('re_index'||all_ind.index_name || ' 重建成功 ');
     end loop;

   end case;



  end loop;
exception
 when others then
     
      sg_log_err('re_index',sqlerrm);
       commit;
       --log_err('re_index',sqlerrm);
       dbms_output.put_line(sqlerrm);

end re_index;

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

转载于:http://blog.itpub.net/29065182/viewspace-1622381/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值