Category - DATAGUARD

Converting a Failed Primary Into a Standby Database Using Flashback Database

Converting a Failed Primary Into a Standby Database Using Flashback Database

After a failover occurs, the original primary database can no longer participate in 
the Oracle Data Guard configuration until it is repaired and established as a standby database in the new configuration.

We can use the Flashback Database feature to recover the failed primary database to a point 
in time before the failover occurred, and then convert it into a physical or logical standby database in the new configuration.

The following steps assume that a failover has been performed to a physical standby database and 
that Flashback Database was enabled on the old primary database at the time of the failover.

On New Primary

[oracle@racnoden1 ~]$ sqlplus "/as sysdba"
SQL> @name

NAME      OPEN_MODE           DATABASE_ROLE    PROTECTION_MODE
--------- -------------------- ---------------- --------------------
DBSET      READ WRITE           PRIMARY        MAXIMUM PERFORMANCE
DBSET      READ WRITE           PRIMARY        MAXIMUM PERFORMANCE

SQL> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;

TO_CHAR(STANDBY_BECAME_PRIMARY_SCN)
----------------------------------------
4514282

On OLD Primary

SQL> @name

NAME      OPEN_MODE           DATABASE_ROLE    PROTECTION_MODE
--------- -------------------- ---------------- --------------------
DBSET      MOUNTED           PRIMARY        MAXIMUM PERFORMANCE

SQL> shut immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.

[oracle@racsetn1 ~]$ sqlplus "/as sysdba"
SQL> STARTUP MOUNT;
ORACLE instance started.

Total System Global Area 2751463160 bytes
Fixed Size            8900344 bytes
Variable Size          637534208 bytes
Database Buffers     2097152000 bytes
Redo Buffers            7876608 bytes
Database mounted.

SQL> FLASHBACK DATABASE TO SCN  4514282;

Flashback complete.

SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

Database altered.

SQL> show parameter log_archive_dest_2

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2             string     SERVICE=TNSSET SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DBSET

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_2         string     ENABLE

SQL> @name

NAME      OPEN_MODE           DATABASE_ROLE    PROTECTION_MODE
--------- -------------------- ---------------- --------------------
DBSET      MOUNTED           PHYSICAL STANDBY MAXIMUM PERFORMANCE

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
Database altered.

SQL> @sync

    Thread Last Sequence Received Last Sequence Applied Difference
---------- ---------------------- --------------------- ----------
     1              205            205      0
     2              153            153      0

[oracle@racsetn1 ~]$ srvctl stop database -d DBTAR
[oracle@racsetn1 ~]$ srvctl start database -d DBTAR -o "READ ONLY"

SQL> @name
NAME      OPEN_MODE           DATABASE_ROLE    PROTECTION_MODE
--------- -------------------- ---------------- --------------------
DBSET      READ ONLY           PHYSICAL STANDBY MAXIMUM PERFORMANCE
DBSET      READ ONLY           PHYSICAL STANDBY MAXIMUM PERFORMANCE

SQL> @sync

    Thread Last Sequence Received Last Sequence Applied Difference
---------- ---------------------- --------------------- ----------
     1              205            205      0
     2              153            153      0

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

Database altered.

SQL> SQL>