1. 程式人生 > >ORACLE索引失效的問題分析

ORACLE索引失效的問題分析

1.導致的原因:
     在SQL*LOADER 載入過程中會維護索引,由於資料量比較大,在SQL*LOADER 載入過程中出現異常情況,導致ORACLE 來不及維護索引,導致索引處於失效狀態,影響查詢和載入。 異常情況主要有:在載入過程中殺掉SQL*LOADER 程序,重啟,表空間不夠等。

2.  global索引,當global 索引所在表執行alter table 涉及下列操作時,會導至該索引失效:

? ADD PARTITION | SUBPARTITION

? COALESCE PARTITION | SUBPARTITION

? DROP PARTITION | SUBPARTITION

? EXCHANGE PARTITION | SUBPARTITION

? MERGE PARTITION | SUBPARTITION

? MOVE PARTITION | SUBPARTITION

? SPLIT PARTITION | SUBPARTITION

? TRUNCATE PARTITION | SUBPARTITION

因此,建議使用者在執行上述操作sql 語句後附加update indexes 子句,oracle 即會自動維護全域性索引。

3. 執行alter table 時未指定update indexes 子句:

如果是range/list 分割槽,其local 索引和global 索引不會受影響;

如果是hash 分割槽,新加分割槽及有資料移動的分割槽的local 索引和glocal 索引會被置為unuseable,

需要重新編譯

對於分割槽表中索引失效要重建索引

select 'alter index '||t.index_name||' rebuild partition '||t.partition_name from user_ind_partitions t where t.index_name='IDX_PART2'  and t.status='unusable'

查出來後,在命令視窗執行。查出來的語句就可以了。