Oracle 索引失效查詢監控

失效查詢監控語句:

普通索引:
SELECT owner, index_name, tablespace_name
  FROM dba_indexes
 WHERE status = 'UNUSABLE';

分區索引:

SELECT index_owner, index_name, partition_name, tablespace_name
  FROM dba_ind_PARTITIONS
 WHERE status = 'UNUSABLE';

子分區索引:

SELECT index_owner,
       index_name,
       partition_name,
       subpartition_name,
       tablespace_name
  FROM dba_ind_SUBPARTITIONS
 WHERE status = 'UNUSABLE';

 

對應的批量生成修復腳本:


SELECT 'alter index ' || owner || '.' || index_name ||
       ' rebuild tablespace ' || tablespace_name || ';'
  FROM dba_indexes
 WHERE status = 'UNUSABLE';

SELECT 'alter index ' || index_owner || '.' || index_name ||
       ' rebuild partition ' || PARTITION_NAME || ' TABLESPACE ' ||
       tablespace_name || ';'
  FROM dba_ind_partitions
 WHERE status = 'UNUSABLE';

SELECT 'alter index ' || index_owner || '.' || index_name ||
       ' rebuild subpartition ' || SUBPARTITION_NAME || ' TABLESPACE ' ||
       tablespace_name || ';'
  FROM dba_ind_subpartitions
 WHERE status = 'UNUSABLE';

或者PL/SQL

set serveroutput on size unlimited

BEGIN
  FOR x IN
  (
    SELECT 'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' REBUILD ONLINE PARALLEL' comm
    FROM    dba_indexes
    WHERE   status = 'UNUSABLE'
    UNION ALL
    SELECT 'ALTER INDEX '||index_owner||'.'||index_name||' REBUILD PARTITION '||partition_name||' ONLINE PARALLEL'
    FROM    dba_ind_PARTITIONS
    WHERE   status = 'UNUSABLE'
    UNION ALL
    SELECT 'ALTER INDEX '||index_owner||'.'||index_name||' REBUILD SUBPARTITION '||subpartition_name||' ONLINE PARALLEL'
    FROM    dba_ind_SUBPARTITIONS
    WHERE   status = 'UNUSABLE'
  )
  LOOP
    dbms_output.put_line(x.comm);
    EXECUTE immediate x.comm;
  END LOOP;
END;

下面是我的公衆號:定期會更新一些Oracle 數據庫及Python相關的學習經驗。歡迎關注:

QQ羣:823311257 歡迎大家加入一起學習。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章