Resolving
Archive gap Standby Database Using Incremental RMAN(using SCN)
If you find huge gap between standby and primary, and your primary site
does not have archives, your backup script deleted the archives.
In this scenario we can use SCN based incremental backup to sync the
standby.
Standby
site
Cancel the managed recovery operation on the standby site
SQL> alter database recover managed standby
database cancel;
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
507189
SQL> shutdown immediate
Primary
site
Switch to the primary site and change the log_archive_dest_2 initialization parameter and take an incremental backup of the database using the scn value that has been taken from the standby database:
Sql>alter system set LOG_ARCHIVE_DEST_STATE_2=defer;
System altered
RMAN> backup incremental from scn 507189 database format='/u02/rman_backup/incremental/incr_backup_%U';
Create the standby controlfile and switch the current redo log file:
SQL>alter database create standby controlfile as '/u01/rman_backup/standby_control.ctl';
SQL> alter system switch logfile;
System altered.
Copy the standby controlfile and incremental backup file to the standby
side, start up the standby database in nomount modeand change the parameter
file to make the instance use the standby controlfile:
Standby site
Assume we have copied to /u01/rman_backup/ Location
SQL> alter system set
control_files='/u01/rman_backup/standby_control.ctl' scope=spfile;
System altered.
Alternate to above step, we can replace the existing controlfiles with the standby_control.ctl by renaming it to corresponding name.
SQL> shutdown immediate
SQL> startup nomount
Mount the standby database and catalog the incremental backup to its repository:
SQL> alter database mount standby database;
RMAN> catalog
backuppiece'/u01/rman_backup/incr_backup_1mlfj8pq_1_1';
Now, recover the database using incremental backup:
RMAN> recover database;
channel ORA_DISK_1: starting incremental datafile
backupset restore
channel ORA_DISK_1: reading from backup piece
/u02/rman_backup/
incr_backup_1mlfj8pq_1_1
channel ORA_DISK_1: restored backup piece 1
piece handle=/u02/rman_backup/incr_backup_1mlfj8pq_1_1
tag=TAG20100606T224202
channel ORA_DISK_1: restore complete, elapsed time:
00:00:02
starting media recovery
archive log thread 1 sequence 58 is already on disk
as file
/u01/oracle/product/10.2.0/db_1/flash_recovery_area/TEST/archivelog/
2010_06_07/o1_mf_1_58_60s4sjbc_.arc
archive log
filename=/u01/oracle/product/10.2.0/db_1/flash_recovery_area/TEST/
rchivelog/2010_06_07/o1_mf_1_58_60s4sjbc_.arc
thread=1 sequence=58
unable to find archive log
archive log thread=1 sequence=59
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK
FOLLOWS ===============
RMAN-00571:
===========================================================
RMAN-03002: failure of recover command at 06/07/2010
02:38:36
RMAN-06054: media recovery requesting unknown log:
thread 1 seq 59 lowscn 508306
RMAN> exit
Now switch to the standby database and run the recover standby database command. RMAN will look for the next archived redo log file and apply it automatically:
SQL> recover standby database;
Then query the current scn value on the standby database
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
511301
Now start redo apply process on standby
SQL>ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE DISCONNECT FROM SESSION;