Oracle RMAN Duplicate Fails at Open Resetlogs – Resolved
While duplicating the test database from a production backup using RMAN, the restore and recovery completed successfully.
However, the open resetlogs step failed with the following error:
Executing: alter database enable block change tracking using file '/oradata01/db1/Block_change_tracking.dbf'
contents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Script
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 05/27/2025 15:33:05
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
RMAN-06136: Oracle error from auxiliary database:
ORA-00344: unable to re-create online log '/oraredo02/db1/redo01.log'
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
Root Cause: The error occurred because the directory /oraredo02/db1 did not exist on the test server.
[oracle@hostname db1]$ cd /oraredo02/db1
-bash: cd: /oraredo02/db1: No such file or directory
[oracle@hostname db1]$ mkdir -p /oraredo02/db1
Database status:
SQL> select name, open_mode from v$database;
NAME OPEN_MODE
-------- --------------------
DB1 MOUNTED
SQL> select member from v$logfile;
MEMBER
---------------------------------------------------------------
/oraredo02/db1/redo04.log
/oraredo02/db1/redo03.log
/oraredo02/db1/redo02.log
/oraredo02/db1/redo01.log
see above Controlfile contains references to redo logs that don’t exist physically as location was missing in test server but controlfile restored from prod having these details.
Adding New Redo Log files of same size , idea is to add 4 new logfiles and drop the old files from controlfile(as physically they dont exists)
SQL> ALTER DATABASE ADD LOGFILE '/oraredo02/db1/redo05.log' SIZE 100M;
SQL> ALTER DATABASE ADD LOGFILE '/oraredo02/db1/redo06.log' SIZE 100M;
SQL> ALTER DATABASE ADD LOGFILE '/oraredo02/db1/redo07.log' SIZE 100M;
SQL> ALTER DATABASE ADD LOGFILE '/oraredo02/db1/redo08.log' SIZE 100M;
Attempt to Drop Old Redo Logs
Dropping log 4 failed because it was the current log.
SQL> ALTER DATABASE DROP LOGFILE '/oraredo02/db1/redo04.log';
ERROR at line 1:
ORA-01623: log 4 is current log for instance db1 (thread 1) - cannot drop
ORA-00312: online log 4 thread 1: '/oraredo02/db1/redo04.log'
Check Redo Log Status
SQL> COL MEMBER FOR A50;
SQL> SET LINES 200;
SQL> SET PAGES 1000;
SQL> SELECT l.group#, l.thread#, f.member, l.archived, l.status, (bytes/1024/1024) fsize
FROM v$log l, v$logfile f
WHERE f.group# = l.group#;
GROUP# THREAD# MEMBER ARC STATUS FSIZE
------ ------- ---------------------------------------------- --- ---------------- ------
1 1 /oraredo02/db1/redo01.log YES CLEARING 100
2 1 /oraredo02/db1/redo02.log YES CLEARING 100
3 1 /oraredo02/db1/redo03.log YES CLEARING 100
4 1 /oraredo02/db1/redo04.log YES CLEARING_CURRENT 100
5 1 /oraredo02/db1/redo05.log YES UNUSED 100
6 1 /oraredo02/db1/redo06.log YES UNUSED 100
7 1 /oraredo02/db1/redo07.log YES UNUSED 100
8 1 /oraredo02/db1/redo08.log YES UNUSED 100
Dropping Old Redo Logs
SQL> ALTER DATABASE DROP LOGFILE '/oraredo02/db1/redo01.log';
Database altered.
SQL> ALTER DATABASE DROP LOGFILE '/oraredo02/db1/redo02.log';
Database altered.
SQL> ALTER DATABASE DROP LOGFILE '/oraredo02/db1/redo03.log';
Database altered.
SQL> ALTER DATABASE DROP LOGFILE '/oraredo02/db1/redo04.log';
ERROR at line 1:
ORA-01623: log 4 is current log for instance db1 (thread 1) - cannot drop
Attempted Log Switch
SQL> ALTER SYSTEM SWITCH LOGFILE;
ERROR at line 1:
ORA-01109: database not open
Final Fix – Clear Unarchived Redo Log
SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 4;
Database altered.
Database Open Resetlogs Successful
SQL> ALTER DATABASE OPEN RESETLOGS;
Database altered.
Conclusion: Always ensure redo log paths exist prior to RMAN duplication. If controlfile contains references to missing redo logs and you do not need recovery from them, use CLEAR UNARCHIVED LOGFILE to clear them and proceed with open resetlogs.