oracleで、インデックスを違う表領域に移動したくなった場合
oracle使っててインデックスを作るときに、入れる表領域を指定しないと、そのユーザのdefault tablespaceに作られてしまう。user_segmentsなんかを見てインデックス用の表領域に入ってないことに気づい(て青ざめ)た時にこういうのを打つ。(USER_IDX表領域に持っていきたい場合)
alter index index_name rebuild tablespace USER_INDX
というのを、インデックスの数だけ打てばよい。で、インデックスの数だけ出すにはsqlplus上でこうする。
set lin 1000 set trims off set feed off set pages 0 spool idx_move.sql select 'alter index ' || name || ' rebuild tablespace USER_INDX;' from user_objects where object_type = 'INDEX' ; spool off ed idx_move.sql -- SQL>を取り除いたり。内容確認
(SQL>という表記を取りたければ、set sqlprompt '' という方法もあるにはあるんだが、)
納得の行く出来であれば(主キーなんかも一緒に移動用スクリプトに含まれるからそれで良いのかの確認をしてから)実行する。
@idx_move.sql