方法:1、利用“select status from user_indexes where index_name='索引名稱'”語句,若結果返回VALID,則索引沒有失效;2、利用“select status from DBA_IND_PARTITIONS”語句查看分區索引狀態;3、利用“select status from dba_indexes”查看普通索引狀態。
oracle查看索引
1、打開PLSQL,輸入賬號密碼,登陸需要判斷索引狀態的數據庫。打開SQL窗口,輸入如下SQL
1 |
|
如果返回結果爲VALID,則表示索引有效!
2、在相應用戶下執行一下語句:
1 |
|
如果狀態不是VALID的,那麼就是失效的索引。
3、在相應用戶下執行一下語句
1 |
|
如果狀態不是VALID的,那麼就是失效的索引。
擴展:
ORACLE查看某個表的索引狀態
狀態列STATUS說明:
valid:當前索引有效
N/A :分區索引 有效
unusable:索引失效
在Oracle數據庫中,哪些操作會導致索引失效?
Q
題目
在Oracle數據庫中,哪些操作會導致索引失效?
A
答案
當某些操作導致數據行的ROWID改變,索引就會完全失效。可以分普通表和分區表來討論哪些操作將導致索引失效。
(一)普通表索引失效的情形如下所示:
① 手動置索引無效:ALTER INDEX IND_OBJECT_ID UNUSABLE;。
② 如果對錶進行MOVE操作(包含移動表空間和壓縮操作)或在線重定義表後,那麼該表上所有的索引狀態會變爲UNUSABLE。MOVE操作的SQL語句爲:ALTER TABLE TT MOVE;。
③ SQL*Loader加載數據。
在SQL*Loader加載過程中會維護索引,由於數據量比較大,在SQL*Loader加載過程中出現異常情況,也會導致Oracle來不及維護索引,導致索引處於失效狀態,影響查詢和加載。異常情況主要有:在加載過程中殺掉SQL*Loader進程、重啓或表空間不足等。
(二)分區表索引失效的情形如下所示:
① 對分區表的某個含有數據的分區執行了TRUNCATE、DROP操作可以導致該分區表的全局索引失效,而分區索引依然有效,如果操作的分區沒有數據,那麼不會影響索引的狀態。需要注意的是,對分區表的ADD操作對分區索引和全局索引沒有影響。
② 執行EXCHANGE操作後,全局索引和分區索引都無條件地會被置爲UNUSABLE(無論分區是否含有數據)。但是,若包含INCLUDING INDEXES子句(缺省情況下爲EXCLUDING INDEXES),則全局索引會失效,而分區索引依然有效。
③ 如果執行SPLIT的目標分區含有數據,那麼在執行SPLIT操作後,全局索引和分區索引都會被被置爲UNUSABLE。如果執行SPLIT的目標分區沒有數據,那麼不會影響索引的狀態。
④ 對分區表執行MOVE操作後,全局索引和分區索引都會被置於無效狀態。
④ 手動置其無效:ALTER INDEX IND_OBJECT_ID UNUSABLE;。
對於分區表而言,除了ADD操作之外,TRUNCATE、DROP、EXCHANGE和SPLIT操作均會導致全局索引失效,但是可以加上UPDATE GLOBAL INDEXES子句讓全局索引不失效。重建分區索引的命令爲:ALTER INDEX IDX_RANG_LHR REBUILD PARTITION P1;。
分區表的索引是否失效情況如下表所示:
begin dbms_stats.gather_table_stats('TABLE_SCHAME','TABLE_FULL_NAME',estimate_percent => dbms_stats.AUTO_SAMPLE_SIZE,cascade => true); end;---Xa庫執行分析灰度數據是否導入