I got ” ORA-00279: change generated needed recovery ” error in Oracle database.
ORA-00279: change generated needed recovery
Details of error are as follows.
ORA-00279: change string generated at string needed for thread string Cause: The requested log is required to proceed with recovery. Action: Please supply the requested log with "ALTER DATABASE RECOVER LOGFILE <file_name>" or cancel recovery with "ALTER DATABASE RECOVER CANCEL".
The following Error Messages are seen on a Physical Standby Database when Manual Recovery
is attempted and even when you cancel and try to restart Managed Recovery:
SQL> recover standby database;
ORA-00279: change 193486616 generated at 11/12/2020 21:10:35 needed for thread 37513
ORA-00289: suggestion : /opt/oracle/oradata/PATH/archives/FILE_NAME.ARC
ORA-00280: change 193486616 for thread 37513 is in sequence #31360
When verified the thread number is 1 usually but wondering where this 37513 thread has
come and how to fix this. Where does this erroneous thread come from?
change string generated at string needed for thread string
This ORA-00279 error is related to the requested log is required to proceed with recovery.
Please supply the requested log with “ALTER DATABASE RECOVER LOGFILE <file_name>”
OR
cancel recovery with “ALTER DATABASE RECOVER CANCEL”.
Manual Recovery has been started after Managed Recovery has been abnormally terminated for any Reason.
This is really unusual to see such out of order thread number. The issue is with the standby control file corruption giving out an erroneous value for the thread. So recreate the standby control file to fix this error.
Follow these Steps if you have to recreate the Physical Standby Controlfile:
1. Stop Managed Recovery Process on the Standby Database (if still running):
SQL> alter database recover managed standby database cancel;
2. Shutdown the Standby Database:
SQL> shutdown immediate;
3. Connect to the Primary Database as SYS:
SQL> connect sys/<Password>@<Primary> as sysdba
4. Create a new Physical Standby Controlfile from the Primary:
SQL> alter database create standby controlfile as '<File-Specification>';
5. Copy the new created Standby Controlfile to the Standby Database using OS-Tools (eg. cp or ftp) and replace the current Standby Controlfile with the new created one.
6. Mount the Standby Database with the new Standby Controlfile:
Oracle 8i and 9i (8.x – 9.x):
SQL> startup nomount SQL> alter database mount standby database;
Oracle 10g and 11g (10.x – 11.x):
SQL> startup mount
7. If the File-Structure is different between Primary and Standby Database, you could either rename the File-Location(s) in the new Standby Controlfile:
SQL> alter database rename file '<old Filespecification or file#>' to '<new Filespecification>';
The above command would require to change STANDBY_FILE_MANAGEMENT from AUTO to MANUAL on standby before executing the rename command. Once rename is done you can set it back to Auto.
or set db_file_name_convert or/and log_file_name_convert init parameters in the standby database.
8. Starting with 9i: If you don’t have Standby RedoLogs proactively on the Primary and want them on the Standby Database or you had Standby RedoLogs with this Standby Database before, now add the Standby RedoLogs (again):
SQL> alter database add standby logfile group <Group No.> ('Filespecification(s)') size <size> reuse;
Please see
Document 219344.1:Usage, Benefits and Limitations of Standby Redo Logs (SRL) for further Details about Standby RedoLogs
9. Re-enable Flashback (if Flashback was enabled previously):
SQL> alter database flashback off; SQL> alter database flashback on;
10. Start Managed Recovery again:
SQL> alter database recover managed standby database disconnect [using current logfile];
Do you want to learn Oracle Database for Beginners, then read the following articles.
Oracle Tutorial | Oracle Database Tutorials for Beginners ( Junior Oracle DBA )