求教全表索引重建该如何做?我现在只会alter index idx_name rebuild。表太多了。求教如何操作。求详细过程谢谢

解决方案 »

  1.   

    begin
      for rec in (select table_name from user_tables)
      loop
        execute immediate
        'alter index '||rec.index_name||' rebuild';
      end loop;
    end;
    /
      

  2.   

    begin
      for rec in (select index_name from user_indexes)
      loop
        execute immediate
        'alter index '||rec.index_name||' rebuild';
      end loop;
    end;不好意思哈,刚打错了,这段可以,有些表如果有约束,可能要先disable掉
      

  3.   

    通过系统表user_indexes就可以完成
      

  4.   

    1、SELECT * FROM USER_INDEXES 找到所有需要进行重建的索引.
    2、ALTER INDEX USER_INDEXES.INDEX_NAME REBUILD;进行重建。SELECT 'ALTER INDEX '||USER_INDEXES.INDEX_NAME||' REBUILD;' FROM ALL_INDEXES;
    得到的结果整列复制到某个SQL文件里面,然后放到cmd下,当着别人的面华丽的执行吧看着黑屏上呼呼闪过的文字,很有一种玩DOS的快感。@rebuild.sql
    or
    start rebuild.sql当然,写个过程也未尝不可,就像版主那样。