ORACLE索引失效的問題分析
阿新 • • 發佈:2019-01-31
1.導致的原因:
在SQL*LOADER 載入過程中會維護索引,由於資料量比較大,在SQL*LOADER 載入過程中出現異常情況,導致ORACLE 來不及維護索引,導致索引處於失效狀態,影響查詢和載入。 異常情況主要有:在載入過程中殺掉SQL*LOADER 程序,重啟,表空間不夠等。
在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'
查出來後,在命令視窗執行。查出來的語句就可以了。