DBAtlas · Atlas für Datenbankbetrieb

Statistiken auf einen früheren Zeitpunkt zurücksetzen

OracleStatistiken

Befehl

-- 1) Retention and the oldest point you can return to:
SELECT DBMS_STATS.GET_STATS_HISTORY_RETENTION    AS retention_days,
       DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY AS oldest_available
FROM   dual;

-- 2) Statistics history of the table:
SELECT table_name, partition_name,
       TO_CHAR(stats_update_time,'YYYY-MM-DD HH24:MI:SS TZH:TZM') AS stats_update_time
FROM   dba_tab_stats_history
WHERE  owner = 'CUSTOMER_APP' AND table_name = 'SALES'
ORDER  BY stats_update_time DESC;

-- 3) Return to the point before the plan regressed:
BEGIN
  DBMS_STATS.RESTORE_TABLE_STATS(
    ownname         => 'CUSTOMER_APP',
    tabname         => 'SALES',
    as_of_timestamp => TIMESTAMP '2026-10-07 22:00:00 +03:00',
    no_invalidate   => FALSE);
END;
/
-- Whole schema: DBMS_STATS.RESTORE_SCHEMA_STATS('CUSTOMER_APP', <timestamp>)

-- Change the retention (days):
-- EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(31);

Was es tut

DBMS_STATS speichert vor jeder Erfassung die vorherigen Statistiken in SYSAUX (standardmäßig 31 Tage). Die RESTORE_*-Prozeduren setzen Tabellen-/Schemastatistiken auf ihren Stand zum angegebenen Zeitpunkt zurück; mit no_invalidate=>FALSE werden Cursors sofort neu geparst.

Wann einsetzen

Als schnellstes Rollback, wenn auf die nächtliche Statistikerfassung eine Planregression folgt, und um zu testen, ob eine Änderung durch Statistiken verursacht wurde.

Vorsicht

Keine Lizenz erforderlich. Gesperrte Statistiken lassen sich nicht zurücksetzen (zuerst entsperren). Die nächste automatische Erfassung bringt nach dem Restore wieder neue Statistiken; für eine dauerhafte Lösung setze Tabellenpräferenzen, sperre die Statistiken oder nutze eine SQL Plan Baseline. Eine lange Aufbewahrung lässt SYSAUX wachsen (Tabellen WRI$_OPTSTAT_*).

In DBAtlas öffnen →

Verwandte Einträge