Statistiken auf einen früheren Zeitpunkt zurücksetzen
OracleStatistikenBefehl
-- 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_*).