600多个表,800多个索引,都在同一表空间,现想把索引转移到专用表空间,如何做最经济。

解决方案 »

  1.   

    用动态sql
    select 'ALTER INDEX '||index_name|| ' REBUILD TABLESPACE NEWTBS;'
      from user_indexes;然后把查询结果copy出来paste到sql-plus中执行就可以了
      

  2.   

    使用alter index index_name rebuild tablespace new_tbs_name命令是重建索引及移动表空间最有效的方法。
    1、生成脚本:
    sql>set pagesize 0
    sql>spool c:\s.sql
    sql>select 'alter index '||index_name||' rebuild tablespace new_tbs_name' from user_indexes;
    sql>spool off
    2、运行脚本:
    sql>@c:\s.sql
      

  3.   

    呵,谢谢 KingSunSha兄,还有 tsj68。
    不知道这方法对表是否也适用?
      

  4.   

    表占用空间通常比索引占空间大,可以检查下是不是有太多的索引在同一个表上,这样可能会造成更新和插入的代价太大,不过这不是绝对的,具体情况要具体分析,不过无论如何table和index分开放都是对的 :-)
      

  5.   

    大家快收藏ing 呀~~
    我是 Up 贴的... [ 不要分:-) ]