DBAtlas · Atlas für Datenbankbetrieb

ORA-01555: Snapshot too old (Oracle)

Der Oracle-Fehler 'ORA-01555: snapshot too old' bedeutet, dass die alten (Undo-)Daten, die eine Abfrage für ein konsistentes Lesen braucht, bereits überschrieben wurden. Dieser Baum grenzt die Quelle des Fehlers ein (lange Abfrage + zu wenig UNDO, hoher Undo-Umschlag oder LOB) und führt zur richtigen Lösung.

Wo tritt der Fehler auf?

Bestimme zuerst den Kontext des Fehlers. Tritt das klassische ORA-01555 bei einem lang laufenden SELECT/Report auf oder beim Zugriff auf eine LOB-Spalte (CLOB/BLOB)? LOB-bezogenes ORA-01555 ist ein anderer Mechanismus (PCTVERSION/RETENTION) und wird separat gelöst.

SELECT sql_id, elapsed_time/1e6 AS sec, sql_text
FROM v$sql ORDER BY elapsed_time DESC FETCH FIRST 10 ROWS ONLY;
  • Bei einer lang laufenden Abfrage/einem Report
  • Beim Zugriff auf eine LOB-Spalte

Reicht UNDO, ist die Retention angemessen?

Eine lange Abfrage liest das alte Abbild von Blöcken, die seit ihrem Start geändert wurden, aus UNDO. Ist der UNDO-Tablespace klein oder undo_retention kürzer als die Abfragedauer, wird altes Undo überschrieben. UNDO-Nutzung und Retention messen.

SHOW PARAMETER undo_retention;
SELECT tablespace_name, SUM(bytes)/1024/1024 AS mb, status
FROM dba_undo_extents GROUP BY tablespace_name, status;
SELECT MAX(maxquerylen) AS longest_query_sec, MAX(tuned_undoretention) AS tuned_retention
FROM v$undostat;
  • UNDO ist klein / Retention kürzer als die Abfrage
  • UNDO reicht, aber Commits sind sehr häufig
  • Die Abfrage läuft übermäßig lange

Ursache: zu wenig UNDO / Retention

Das von der langen Abfrage benötigte alte Undo wurde überschrieben, weil die Retention-Dauer abgelaufen oder der Tablespace voll war. UNDO vergrößern und die Retention so setzen, dass sie die Abfragedauer abdeckt.

Ursache: hoher Undo-Umschlag (häufige Commits)

Starke DML mit sehr häufigen Commits recycelt Undo-Blöcke schnell und löscht das alte Abbild, das die lange Abfrage braucht. Der Effekt 'commit cleanout' verschärft das.

Ursache: übermäßig lange Abfragedauer

Die Abfrage läuft so lange, dass selbst eine vernünftige undo_retention nicht ausreicht. Die dauerhafte Lösung ist, die Abfrage zu beschleunigen oder ihre Last auszulagern.

Ursache: LOB-Retention / PCTVERSION

ORA-01555 beim Lesen eines LOB bedeutet, dass der Platz für alte LOB-Versionen (RETENTION oder PCTVERSION) nicht ausreicht. LOBs haben einen eigenen Versionierungsmechanismus.

In DBAtlas öffnen →