Thursday, June 20, 2019

RMAN-05502: the target database must be mounted when issuing a DUPLICATE command

Problem:

While restoring a Non-Production DB from RMAN backup using Duplicate method , I received this error:
RMAN-05502: the target database must be mounted when issuing a DUPLICATE command

Here is the RMAN script I was using:
# export ORACLE_SID=pssp
# rman AUXILIARY /
RMAN> 
run {
ALLOCATE AUXILIARY CHANNEL ch1  DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL ch2  DEVICE TYPE DISK;
duplicate database to "pssp"  backup location '/db02/bkp/2019-06-02' nofilenamecheck
UNTIL TIME "TO_DATE('01/06/2019 13:05:17', 'DD/MM/YYYY HH24:MI:SS')";
}

This duplicate method is supposed to work while the instance "to be restored" is in NOMOUNT mode, so why the error message is asking to mount it?!

I used to run the duplicate command one time with a random UNTIL TIME date ahead of the backup date, then the RMAN will give me an error indicating the actual farthest recovery date the backup can restore to, then I use the same date from the error message and feed it to UNTIL TIME clause when running the same script for the second time.

Solution:

If you are performing the Duplicate from an RMAN backup like my case do the following:

Simply remove the UNTIL TIME clause  from the script if you want to recover the database to the latest archivelog available in the backup.
 
Or: If you insist on restoring the DB to a specific point in time inside that backup, then you have to know that the date specified in the UNTIL TIME clause is trying to restore the backup to a date older than the backup creation date, this is why I received that vague error message. Once I used a date ahead of the backup time (randomly) I got the right farthest recovery date the backup can go to:

run {
ALLOCATE AUXILIARY CHANNEL ch1  DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL ch2  DEVICE TYPE DISK;
duplicate database to "pssp"  backup location '/db02/bkp/2019-06-02' nofilenamecheck
UNTIL TIME "TO_DATE('20/06/2019 13:05:17', 'DD/MM/YYYY HH24:MI:SS')";
}

RMAN-06617: UNTIL TIME (20-Jun-2019 13:05:17) is ahead of last NEXT TIME in archived logs (02-Jun-2019 17:30:19)

Then I restarted the instance in NOMOUNT mode one more time and used the exact "last NEXT TIME in archived logs" received from the above error message and the duplicate succeeded.

 run {
ALLOCATE AUXILIARY CHANNEL ch1  DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL ch2  DEVICE TYPE DISK;
duplicate database to "pssp"  backup location '/db02/bkp/2019-06-02' nofilenamecheck
UNTIL TIME "TO_DATE('02/06/2019 17:30:19', 'DD/MM/YYYY HH24:MI:SS')";
}

If you are performing the Duplicate from a LIVE database:
Most probably you are swapping between source and target DBs in the Connect part in your script, when duplicating from an ACTIVE DB, the TARGET should be connecting to the source LIVE DB which you will restore from e.g. Production DB, and the AUXILIARY should be the TARGET DB which you will restore to e.g. Test DB which should be in NOMOUNT mode, like this:
connect target sys/xxx@SOURCEDB 
connect auxiliary sys/xxx@TARGETDB
...
DUPLICATE TARGET DATABASE TO ... FROM ACTIVE DATABASE
... 
 
Tip: When duplicating from an active database, It's NOT recommended to use "NOFILENAMECHECK" with the duplicate command to avoid overwriting the source DB files.

 
Conclusion:

When doing a duplicate from an RMAN backup, RMAN-05502 error can happen because of using a wrong date in the UNTIL TIME clause, once you use the right date and time of the backupset the Duplicate will go through.
If you are duplicating from an active database, RMAN-05502 error can indicate that you are swapping between source and target DBs in the RMAN connect command.

No comments:

Post a Comment