失效查詢監控語句:
普通索引:
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 歡迎大家加入一起學習。