Wohl einer der bekanntesten Fehler überhaupt, der gute alte ORA-01555 und noch genauso aktuell wie früher. Der Fehlertext ist mittlerweile irreführend, da eigentlich nicht mehr Rollback Segmente, sondern nur noch Undo Segmente verwendet werden. Nichtsdestotrotz bleibt die Ursache des Problems das gleiche, einer Session war es nicht möglich einen konsistenten Datenzustand zum Zeitpunkt X abzufragen. Der Grund hierfür sind Änderungen an den Daten, welche es verhindern dass eine Abfrage ein konsistentes Ergebnis liefern kann.
Wie kommt es zu dem Fehler
Hier bietet sich am besten ein Entscheidungsbaum an, welcher die dahinter stehende Logik erklärt.
- wenn „Undo Tablespace hat eine feste Größe (Kein Autoextend)“ dann
- wenn „Kann ein neues Undo Extent angelegt werden“ dann
- „Erstelle ein neues Undo Extent. Ende“
- ansonsten
- wenn „Gibt es ‚Expired‘ Undo Extents, welche überschrieben werden können“ dann
- „Überschreibe ‚Expired‘ Undo Extents. Ende“
- ansonsten
- wenn „Gibt es ‚Unexpired‘ Undo Extents, welche überschrieben werden können“ dann
- „Überschreibe ‚Unexpired‘ Undo Extents. Ende“
- ansonsten
- „ORA-01555 Fehler“
- wenn „Gibt es ‚Unexpired‘ Undo Extents, welche überschrieben werden können“ dann
- wenn „Gibt es ‚Expired‘ Undo Extents, welche überschrieben werden können“ dann
- wenn „Kann ein neues Undo Extent angelegt werden“ dann
- ansonsten –Undo Tablespace steht auf Autoextend, Anm.d. Red.
- wenn „Kann ein neues Undo Extent angelegt werden“ dann
- „Erstelle ein neues Undo Extent. Ende“
- ansonsten
- wenn „Hat der Undo Tablespace bereits seine maximale Größe erreicht?“ dann
- wenn „Gibt es ‚Expired‘ Undo Extents, welche überschrieben werden können“ dann
- „Überschreibe ‚Expired‘ Undo Extents. Ende“
- ansonsten
- wenn „Gibt es ‚Unexpired‘ Undo Extents, welche überschrieben werden können“ dann
- „Überschreibe ‚Unexpired‘ Undo Extents. Ende“
- ansonsten
- „ORA-01555 Fehler“
- wenn „Gibt es ‚Unexpired‘ Undo Extents, welche überschrieben werden können“ dann
- wenn „Gibt es ‚Expired‘ Undo Extents, welche überschrieben werden können“ dann
- ansonten
- „Erweitere das Datenfile und erstelle ein neues Undo Extent. Ende“
- wenn „Hat der Undo Tablespace bereits seine maximale Größe erreicht?“ dann
- wenn „Kann ein neues Undo Extent angelegt werden“ dann
Aus dem Entscheidungsbaum ergibt sich eigentlich auch schon die Lösung für das Problem, entweder den Undo Tablespace automatisch erweitern lassen oder die Vorhaltezeit von Undo Extents mit Hilfe des Parameters UNDO_RETENTION verändern. Sollte dies Ihr Problem noch nicht beheben, gäbe es noch unzählige weitere Stellschrauben z. B. GUARANTEE Undo und auch Ausnahmefälle wie z. B. die Verwendung von LOBs, dafür bräuchte es dann jedoch eine individuelle Analyse.
Rufen Sie uns an 069-588043610, wir helfen Ihnen gerne !!!
Referenz: Die Ausgabe von oerr
01555, 00000, „snapshot too old: rollback segment number %s with name \“%s\“ too small“
// *Cause: rollback records needed by a reader for consistent read are
// overwritten by other writers
// *Action: If in Automatic Undo Management mode, increase undo_retention
// setting. Otherwise, use larger rollback segments