Saturday 9 September 2017

Recover Standby Database Using Incremental Backup

This article demonstrates how to resolve standby database issues, in case there is any corrupted archivelog which has caused the data guard to go out of sync. Same procedure can be used in case there is huge archivelog gap between primary and standby database

Step 1 :- (Standby Side) - Cancel the recovery process and get current SCN of standby database


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Database altered.

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1018738

Step 2 :- (Primary Side) - Run RMAN incremental backup from SCN on standby side and Copy those backup pieces to standby side


RMAN> BACKUP INCREMENTAL FROM SCN 1018738 DATABASE FORMAT '/tmp/Standby_%U';

Starting backup at 09-SEP-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1 device type=DISK
backup will be obsolete on date 16-SEP-17
archived logs will not be kept or backed up
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/PRODPRIM/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/PRODPRIM/sysaux01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/PRODPRIM/undotbs01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/PRODPRIM/users01.dbf
channel ORA_DISK_1: starting piece 1 at 09-SEP-17
channel ORA_DISK_1: finished piece 1 at 09-SEP-17
piece handle=/tmp/Standby_05se20su_1_1 tag=TAG20170909T191021 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
using channel ORA_DISK_1
backup will be obsolete on date 16-SEP-17
archived logs will not be kept or backed up
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 09-SEP-17
channel ORA_DISK_1: finished piece 1 at 09-SEP-17
piece handle=/tmp/Standby_06se20to_1_1 tag=TAG20170909T191021 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 09-SEP-17

RMAN> exit

[oracle@prim tmp]$ scp Standby_0* oracle@192.168.56.102:/tmp/
oracle@192.168.56.102's password:
Standby_05se20su_1_1                              100%   28MB  27.7MB/s   00:00
Standby_06se20to_1_1                              100% 9600KB   9.4MB/s   00:00
[oracle@prim tmp]$

Step 3 :- (Standby Side) - Catalog the backup pieces and recover the database using the incremental backup

RMAN> CATALOG START WITH '/tmp/Standby';

using target database control file instead of recovery catalog
searching for all files that match the pattern /tmp/Standby
List of Files Unknown to the Database
=====================================
File Name: /tmp/Standby_05se20su_1_1
File Name: /tmp/Standby_06se20to_1_1
Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /tmp/Standby_05se20su_1_1
File Name: /tmp/Standby_06se20to_1_1

RMAN> RECOVER DATABASE NOREDO;

Starting recover at 09-SEP-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=24 device type=DISK
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00001: /u01/app/oracle/oradata/PRODPRIM/system01.dbf
destination for restore of datafile 00002: /u01/app/oracle/oradata/PRODPRIM/sysaux01.dbf
destination for restore of datafile 00003: /u01/app/oracle/oradata/PRODPRIM/undotbs01.dbf
destination for restore of datafile 00004: /u01/app/oracle/oradata/PRODPRIM/users01.dbf
channel ORA_DISK_1: reading from backup piece /tmp/Standby_05se20su_1_1
channel ORA_DISK_1: piece handle=/tmp/Standby_05se20su_1_1 tag=TAG20170909T191021
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished recover at 09-SEP-17

Step 4 :- (Primary Side) - Run the current control file backup for standby and copy the backup piece to standby side

RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/tmp/StandbyCTRL.bkp';

Starting backup at 09-SEP-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=37 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including standby control file in backup set
channel ORA_DISK_1: starting piece 1 at 09-SEP-17
channel ORA_DISK_1: finished piece 1 at 09-SEP-17
piece handle=/tmp/StandbyCTRL.bkp tag=TAG20170909T192131 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 09-SEP-17

[oracle@prim tmp]$ scp /tmp/StandbyCTRL.bkp oracle@192.168.56.102:/tmp/
oracle@192.168.56.102's password:
StandbyCTRL.bkp                              100% 9600KB   9.4MB/s   00:00

Step 5 :- (Standby Side) - Restore the standby controlfile and restart the database

Check the datafile names in standby if there is any change in datafile when compared to primary
select file#, name from v$datafile order by file# ;

RMAN> shutdown immediate

using target database control file instead of recovery catalog
database dismounted
Oracle instance shut down

RMAN> startup nomount

connected to target database (not started)
Oracle instance started
Total System Global Area     839282688 bytes
Fixed Size                     2217992 bytes
Variable Size                494929912 bytes
Database Buffers             339738624 bytes
Redo Buffers                   2396160 bytes

RMAN> RESTORE STANDBY CONTROLFILE FROM '/tmp/StandbyCTRL.bkp';

Starting restore at 09-SEP-17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u01/app/oracle/oradata/PRODSTBY/control01.ctl
output file name=/u01/app/oracle/flash_recovery_area/PRODSTBY/control02.ctl
Finished restore at 09-SEP-17

RMAN> shutdown immediate

Oracle instance shut down

RMAN> startup mount

connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area     839282688 bytes
Fixed Size                     2217992 bytes
Variable Size                494929912 bytes
Database Buffers             339738624 bytes
Redo Buffers                   2396160 bytes

In case there is any change in directory structure. Perform below mentioned steps
RMAN> CATALOG START WITH '/u01/app/oracle/oradata/PRODPRIM/';

Starting implicit crosscheck backup at 09-SEP-17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=25 device type=DISK
Crosschecked 6 objects
Finished implicit crosscheck backup at 09-SEP-17
Starting implicit crosscheck copy at 09-SEP-17
using channel ORA_DISK_1
Crosschecked 2 objects
Finished implicit crosscheck copy at 09-SEP-17
searching for all files in the recovery area
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/backup/o1_mf_ncsnf_TAG20170815T142045_ds5fklmm_.bkp
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/backup/o1_mf_nnndf_TAG20170815T142045_ds5fh5fc_.bkp
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/backup/o1_mf_annnn_TAG20170815T142041_ds5fh218_.bkp
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/backup/o1_mf_annnn_TAG20170815T142204_ds5fknfn_.bkp
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_13_ds5j8fgh_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_14_ds5j8g27_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_9_ds5j87jl_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_11_ds5j8bg4_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_7_ds5j6bgs_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_10_ds5j888f_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_16_ds5j8jyq_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_8_ds5j6dn5_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_15_ds5j8jj2_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_08_15/o1_mf_1_12_ds5j8c68_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_09_09/o1_mf_1_21_dv7vbwbt_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_09_09/o1_mf_1_24_dv7vbxfj_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_09_09/o1_mf_1_19_dv7vbvtp_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_09_09/o1_mf_1_23_dv7vbx0s_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_09_09/o1_mf_1_20_dv7vbvsx_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_09_09/o1_mf_1_25_dv7vbxjr_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_09_09/o1_mf_1_22_dv7vbwob_.arc
File Name: /u01/app/oracle/flash_recovery_area/PRODSTBY/archivelog/2017_09_09/o1_mf_1_17_dv7vbxwy_.arc

searching for all files that match the pattern /u01/app/oracle/oradata/PRODPRIM/
no files found to be unknown to the database

In Case of unknows files found use this command 
RMAN> SWITCH DATABASE TO COPY;

Step 6 :- (Standby Side) - Clear all the standby redolog groups

SQL> select GROUP#, member from v$logfile;

    GROUP# MEMBER
---------- -----------------------------------------------------------------------
         3 /u01/app/oracle/oradata/PRODPRIM/redo03.log
         2 /u01/app/oracle/oradata/PRODPRIM/redo02.log
         1 /u01/app/oracle/oradata/PRODPRIM/redo01.log
         4 /u01/app/oracle/oradata/PRODPRIM/stndby1.log
         5 /u01/app/oracle/oradata/PRODPRIM/stndby2.log
         6 /u01/app/oracle/oradata/PRODPRIM/stndby3.log
         7 /u01/app/oracle/oradata/PRODPRIM/stndby4.log

SQL>  ALTER DATABASE CLEAR LOGFILE GROUP 4;

Database altered.

SQL> ALTER DATABASE CLEAR LOGFILE GROUP 5;

Database altered.

SQL> ALTER DATABASE CLEAR LOGFILE GROUP 6;

Database altered.

SQL> ALTER DATABASE CLEAR LOGFILE GROUP 7;

Database altered.

 Step 7:- (Standby Side) - Start the recovery process on standby side and verify the system

SQL> RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Media recovery complete.

Verify the standby database

SQL> select PROCESS, PID, STATUS, SEQUENCE#, BLOCK# from v$managed_standby;

PROCESS          PID STATUS        SEQUENCE#     BLOCK#
--------- ---------- ------------ ---------- ----------
ARCH            3809 CLOSING              28          1
ARCH            3811 CLOSING              29          1
ARCH            3813 CONNECTED             0          0
ARCH            3815 CLOSING              30          1
MRP0            3825 WAIT_FOR_LOG         31          0
RFS             7025 IDLE                  0          0
RFS             7037 IDLE                 31         18


Compare the sequence and SCN with primary database
SQL>
select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------
            30
SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1069536

No comments:

Post a Comment