Muniqsoft Training

Auswahl  

Rebuild von defekten Indizes 

Oracle
DBA:Monitoring
RDBMS 12.x
10.04.19 (MP)
10.04.19 (MP)

Body

Es ist wohl eines der best gehütesten Geheimnisse, dass defekte Indizes in der Tabelle dba_objects in der Spalte weiterhin mit dem Status VALID stehen.
Wenn man also festellen möchte, welche Indizes defekt sind, muss man in DBA_INDEXES bzw. DBA_PART_INDEXES nachsehen.

Das nachfolgende Skript macht einen Rebuild auf alle defekten Indizes, ohne dass die Ausgabe zuerst gespoolt werden muss.

WITH FUNCTION do_ddl (cmd IN VARCHAR2)
RETURN VARCHAR2
IS
PRAGMA AUTONOMOUS_TRANSACTION; -- damit ist die Funktion eigenständig und beeinflusst niemanden :-)
v_cmd VARCHAR2(32000);
BEGIN
v_cmd:=rtrim(cmd,';'); -- Semmikolon ggf.herausfiltern
EXECUTE IMMEDIATE v_cmd; -- Befehl ausführen
RETURN v_cmd||'; --OK'; -- Befehl erfolgreich ausgeführt
EXCEPTION WHEN OTHERS THEN
 RETURN v_cmd||' --'||sqlerrm;
END;
SELECT do_ddl('ALTER INDEX "'||owner||'"."'||index_name||'" REBUILD;')
FROM dba_indexes i
WHERE status='UNUSABLE'
UNION ALL
SELECT do_ddl('ALTER INDEX  "'||index_owner||'"."'||index_name||'" REBUILD PARTITION "'||partition_name||'";')
FROM dba_ind_partitions
WHERE status='UNUSABLE';

Besuchen Sie uns doch bei einer unsere über 40 Oracle Schulungen in München - Unterhaching.