Oracle索引失効問題のまとめ


今日、オンラインになったばかりのプロジェクトのテクニカルサポートをしていたとき、忠兄は私に次のようなやり方を教えてくれました.
インデックス失効問題の解決方法:
1)原因:
SQL*LOADERのロード中にインデックスを維持し、データ量が比較的大きいため、SQL*LOADERのロード中に異常が発生し、ORACLEがインデックスのメンテナンスに間に合わないため、インデックスが失効状態になり、クエリーとロードに影響を与える.
異常は主に、SQL*LOADERプロセスをロード中に殺し、再起動し、表領域が足りないなどである.
2)解決方法:
インデックスの再構築
3)インデックスの再構築方法
a)索引タイプの表示
    
   select  t1.index_name,t1.partitioned from Dba_Indexes t1
            where t1.Table_Name=upper('CCB_COGNOS_PROD_BALANCE_AA')

表示:
 
                                                     
            CCB_COGNOS_PROD_BALANCE_AA_N1      NO

b)非パーティションインデックス
              :alter index   cin.CCB_COGNOS_PROD_BALANCE_AA_N1          rebuild Nologging

c)パーティションインデックス
失効したパーティションインデックスを特定するには、次の手順に従います.
   
select t.Index_Name, t.Partition_Name, t.Tablespace_Name, t.Status
    from Dba_Ind_Partitions t
   where t.Index_Name = 'CMZ_LOCAL_IDX_2'  

すべてのステータスがunusableのインデックスを再構築
再構築スクリプト:
ALTER INDEX    
             REBUILD PARTITION    
             TABLESPACE     
             NOLOGGING