The symptoms
The database refuses to open even with the force option. The session shows the following error chain:
SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00604: error occurred at recursive SQL level 1
ORA-01555: snapshot too old: rollback segment number with name "" too small
The alert log mirrors this:
Error 604 happened during db open, shutting down database
USER (ospid: 24632): terminating the instance due to error 604
Instance terminated by USER, pid = 24632
ORA-1092 signalled during: alter database open resetlogs...
What is actually going wrong
Two separate problems are stacked here:
- ORA-01589 tells you the controlfile is in a state where Oracle requires
RESETLOGSon the next open. That happens after incomplete recovery, after a controlfile recreate withRESETLOGS, or after RMANRECOVER DATABASE UNTIL .... The error is informational at this point — it just blocks a plainOPEN. - ORA-01555 inside ORA-00604 during open is the real failure. While Oracle replays the recovery and runs the recursive SQL needed to validate the dictionary, it cannot construct a consistent read of an UNDO segment header. The empty rollback-segment name in the message (
"") means the segment header itself is unreadable or has been overwritten — typically the result of a broken UNDO tablespace, restored UNDO that doesn't match the redo timeline, or storage corruption on the UNDO datafile.
So ALTER DATABASE OPEN RESETLOGS is being blocked not by the redo, but by Oracle's inability to read its own active undo during the open-time consistency checks. The instance terminates because the smon background process throws ORA-604 at recursive SQL level 1.
Before you change anything
- Take a cold copy of the entire database (all datafiles, all online and archived redo logs, every controlfile, the spfile/pfile and password file). Work only on a copy. Some of the steps below are one-way.
- Save the full alert log and any trace files referenced by the open attempt — they will name the offending undo segment.
- Confirm the database version and whether the database is in
NOARCHIVELOGorARCHIVELOG. Recovery options differ.
Path A — open with corrupted undo bypass (try in this order)
The standard Oracle workaround is to bypass the unreadable rollback segments at open time, finish the open, then immediately rebuild UNDO. The segment names appear in the alert log as _SYSSMUn$ for automatic undo management.
1. Identify the bad segments
From the closed instance, mount only and query the segments that exist in the controlfile and datafiles:
SQL> STARTUP MOUNT;
SQL> SELECT SEGMENT_NAME, STATUS, TABLESPACE_NAME
FROM DBA_ROLLBACK_SEGS;
Note any segment whose STATUS is NEEDS RECOVERY or that the alert log named explicitly. If DBA_ROLLBACK_SEGS is itself unreadable at mount, take the names from the alert log's open-attempt section.
2. Add the hidden parameters to a pfile
Create a pfile from the spfile and add the bypass parameters. The names you put here must match the alert log exactly:
SQL> CREATE PFILE='/tmp/init_recover.ora' FROM SPFILE;
# Append the following lines to /tmp/init_recover.ora:
*._allow_resetlogs_corruption=TRUE
*._corrupted_rollback_segments=('_SYSSMU1$','_SYSSMU2$','_SYSSMU3$')
*.undo_management='MANUAL'
*.undo_tablespace='UNDOTBS1'
_allow_resetlogs_corruption=TRUE lets the database open even if SCN consistency cannot be proven. _corrupted_rollback_segments tells Oracle to skip the listed segments at open time. Switching undo_management to MANUAL stops Oracle from automatically activating the broken AUM segments.
3. Open with the recovery pfile
SQL> SHUTDOWN ABORT;
SQL> STARTUP MOUNT PFILE='/tmp/init_recover.ora';
SQL> ALTER DATABASE OPEN RESETLOGS;
If the database opens, you have minutes-to-hours to extract every byte you care about. Do not run application workload — the bypass parameters are for export only.
4. Export immediately, then rebuild UNDO
$ expdp system/<pwd> full=Y directory=DATA_PUMP_DIR \
dumpfile=full_recover.dmp logfile=full_recover.log
# When export is complete, drop and recreate UNDO:
SQL> CREATE UNDO TABLESPACE UNDOTBS_NEW DATAFILE '...' SIZE 8G AUTOEXTEND ON;
SQL> ALTER SYSTEM SET undo_tablespace='UNDOTBS_NEW' SCOPE=SPFILE;
SQL> ALTER SYSTEM SET undo_management='AUTO' SCOPE=SPFILE;
SQL> ALTER SYSTEM RESET "_corrupted_rollback_segments" SCOPE=SPFILE;
SQL> ALTER SYSTEM RESET "_allow_resetlogs_corruption" SCOPE=SPFILE;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;
The exported dump is the safety net. Rebuilding UNDO into a fresh tablespace removes the corrupted segments for good. If the export completes cleanly you can either keep this database (after the rebuild) or import the dump into a brand-new instance.
Path A failure modes
Path A does not always work. It fails when:
- The dictionary itself was advanced by partial recovery — recursive SQL throws ORA-600 [4xxx] errors after the resetlogs.
- SYSTEM, SYSAUX, or critical UNDO datafiles have physical corruption (ORA-1578) on dictionary blocks.
- The bypass opens the database but every
SELECTon application tables raises ORA-1555 because the data dictionary still references the bad SCNs.
If any of these happen, do not keep retrying force-open. Each attempt advances the SCN further and reduces the chance of clean extraction. Move to Path B.
Path B — extract data without opening the database
DBRECOVER for Oracle reads datafiles directly. The instance does not need to mount or open. This is the safest route once Path A is uncertain, and it is the only route when the open path is destroying the dictionary.
- Stop the Oracle instance:
shutdown abortif necessary, then unmount. - Take a cold copy of every datafile (
SYSTEM01.DBF,SYSAUX01.DBF, all user tablespace files). SkipTEMPandUNDO— DBRECOVER does not need them. - Open DBRECOVER for Oracle in dictionary mode, point it at the copy of
SYSTEM01.DBFwithTS#=0,RFILE#=1, and enable SCAN BASE TABLES. - Add the rest of the user datafiles using their tablespace number and relative file number from
FILE$. - Browse tables, preview rows, and export to flat files or directly into a fresh Oracle instance via the data bridge.
Download: DBRECOVER for Oracle (latest). The trial validates that every table you need is visible; the paid license removes the row-export limit.
Choosing between Path A and Path B
- If the alert log names a small number of undo segments and the rest of the dictionary is intact, Path A normally works and gets you a clean Data Pump export inside an hour.
- If
SYSTEM01.DBFshows physical corruption, if you have already attempted multiple force-opens, or if recursive SQL keeps throwing different ORA-600 each attempt, switch to Path B. The dictionary will only get worse with more attempts. - For databases that are also missing redo logs or have a mismatched controlfile, Path B is the only safe option — DBRECOVER does not need controlfile, online redo, or UNDO to read row data.
How we can help
- Remote assistance. We can join via screen share, identify the corrupted rollback segments from your alert log, build the recovery pfile, and walk through the resetlogs and undo rebuild.
- DBRECOVER for Oracle. If the database is past the point of safe force-open, the software reads the offline datafiles directly and extracts data. This is the standard last-resort path.
Send the database version, the alert log around the failed open, and a list of datafiles to [email protected]; we will recommend the path that fits the symptoms.
DBRECOVER Recovery Options
For Oracle incidents, start with the DBRECOVER for Oracle trial to verify table visibility, row previews, and export readiness on copied datafiles. For MySQL and InnoDB incidents, DBRECOVER for MySQL is free software and can inspect.ibd files, ibdata1, and database directories locally.
When the case is urgent, preserve the original files first, work from copies, and contact paid emergency support with the database version, platform, error messages, file list, and recovery objective.