Skip to main content

Oracle Data Guard test of switchover and failover



Active DataGuard failover:
check the status before switchover or failover:
SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
SELECT NAME, VALUE, DATUM_TIME FROM V$DATAGUARD_STATS;
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
 
Switchover steps:
Old Primary:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SHUTDOWN ABORT;
STARTUP MOUNT;
 
New primary:
SELECT SWITCHOVER_STATUS FROM V$DATABASE;  -- value should be TO PRIMARY or SESSIONS ACTIVE
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
ALTER DATABASE OPEN;
Bounce the database – this is important, without this step, the v$archive_dest_status will show “bad parameter” and no redo apply on standby.
 
New standby:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
Select * from v$dataguard_stats;
SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
 
 
Failover steps:
 
Old primary:
Mount database
ALTER SYSTEM FLUSH REDO TO target_db_name;
alter system set log_archive_dest_2=''  scope=both;
 
Old standby:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
alter system set log_archive_dest_2=''  scope=both;
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
or
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
 
ALTER DATABASE OPEN;
 
Now test the switchover from test to test_stby:
 
On the old primary:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
 
Database altered.
 
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
 
SWITCHOVER_STATUS
--------------------
RECOVERY NEEDED
 
SQL>
On the old standby:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
 
Database altered.
 
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
 
SWITCHOVER_STATUS
--------------------
NOT ALLOWED
 
SQL> ALTER DATABASE OPEN;
 
Database altered.
 
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
 
SWITCHOVER_STATUS
--------------------
NOT ALLOWED
 
SQL>
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
 
SWITCHOVER_STATUS
--------------------
RECOVERY NEEDED
 
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
 
Total System Global Area 1068937216 bytes
Fixed Size                  2235208 bytes
Variable Size             729810104 bytes
Database Buffers          331350016 bytes
Redo Buffers                5541888 bytes
Database mounted.
SQL> alter database open;
 
Database altered.
 
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
 
Database altered.
 
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
 
SWITCHOVER_STATUS
--------------------
TO PRIMARY
 
SQL>
 
On new primary:
SQL> SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
 
STATUS    GAP_STATUS
--------- ------------------------
BAD PARAM
 
SQL>
 
Bounce the new primary database solved the problem.
 
SQL> SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
VALID     NO GAP
 
 
Now test the switchover from test_stby to test:
Works as expected.
 
Now test the failover of test_stby:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
 
Database altered.
 
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
 
Database altered.
 
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
TO PRIMARY
SQL> alter system set log_archive_dest_2=''  scope=both;
 
System altered.
 
SQL> ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
 
Database altered.
SQL> alter database open;
 
Database altered.
 
SQL> exec print_table('select * from v$database')
DBID                          : 2210233584
NAME                          : TEST
CREATED                       : 17-may-2016 13:32:32
RESETLOGS_CHANGE#             : 1897922
RESETLOGS_TIME                : 30-may-2016 15:37:41
PRIOR_RESETLOGS_CHANGE#       : 995548
PRIOR_RESETLOGS_TIME          : 17-may-2016 13:32:34
LOG_MODE                      : ARCHIVELOG
CHECKPOINT_CHANGE#            : 1897925
ARCHIVE_CHANGE#               : 0
CONTROLFILE_TYPE              : CURRENT
CONTROLFILE_CREATED           : 17-may-2016 13:32:32
CONTROLFILE_SEQUENCE#         : 913217881
CONTROLFILE_CHANGE#           : 1898008
CONTROLFILE_TIME              : 30-may-2016 15:39:36
OPEN_RESETLOGS                : NOT ALLOWED
VERSION_TIME                  : 27-may-2016 13:40:34
OPEN_MODE                     : READ WRITE
PROTECTION_MODE               : MAXIMUM PERFORMANCE
PROTECTION_LEVEL              : MAXIMUM PERFORMANCE
REMOTE_ARCHIVE                : ENABLED
ACTIVATION#                   : 2211353098
SWITCHOVER#                   : 2211353098
DATABASE_ROLE                 : PRIMARY
ARCHIVELOG_CHANGE#            : 0
ARCHIVELOG_COMPRESSION        : DISABLED
SWITCHOVER_STATUS             : NOT ALLOWED
DATAGUARD_BROKER              : DISABLED
GUARD_STATUS                  : NONE
SUPPLEMENTAL_LOG_DATA_MIN     : NO
SUPPLEMENTAL_LOG_DATA_PK      : NO
SUPPLEMENTAL_LOG_DATA_UI      : NO
FORCE_LOGGING                 : NO
PLATFORM_ID                   : 13
PLATFORM_NAME                 : Linux x86 64-bit
RECOVERY_TARGET_INCARNATION#  : 3
LAST_OPEN_INCARNATION#        : 3
CURRENT_SCN                   : 1898135
FLASHBACK_ON                  : NO
SUPPLEMENTAL_LOG_DATA_FK      : NO
SUPPLEMENTAL_LOG_DATA_ALL     : NO
DB_UNIQUE_NAME                : test_stby
STANDBY_BECAME_PRIMARY_SCN    : 1897910
FS_FAILOVER_STATUS            : DISABLED
FS_FAILOVER_CURRENT_TARGET    :
FS_FAILOVER_THRESHOLD         : 0
FS_FAILOVER_OBSERVER_PRESENT  :
FS_FAILOVER_OBSERVER_HOST     :
CONTROLFILE_CONVERTED         : NO
PRIMARY_DB_UNIQUE_NAME        : test
SUPPLEMENTAL_LOG_DATA_PL      : NO
MIN_REQUIRED_CAPTURE_CHANGE#  :
-----------------
 
PL/SQL procedure successfully completed.

Comments

Popular posts from this blog

Opatch apply/lsinventory error: oneoff is corrupted or does not exist

I am applying the quarterly patch for 19c RDBMS, I tried using napply but failed, but somehow it corrupted the inventory though nothing applied. further apply and lsinventory command ran into error like this: $ ./OPatch/opatch lsinventory Oracle Interim Patch Installer version 12.2.0.1.21 Copyright (c) 2020, Oracle Corporation.  All rights reserved. Oracle Home       : /u02/app/oracle/19.0.0 Central Inventory : /u01/app/oraInventory    from           : /u02/app/oracle/19.0.0/oraInst.loc OPatch version    : 12.2.0.1.21 OUI version       : 12.2.0.7.0 Log file location : /u02/app/oracle/19.0.0/cfgtoollogs/opatch/opatch2020-09-08_13-35-59PM_1.log Lsinventory Output file location : /u02/app/oracle/19.0.0/cfgtoollogs/opatch/lsinv/lsinventory2020-09-08_13-35-59PM.txt -------------------------------------------------------------------------------- Inventory load failed... OPatch cannot load inventory ...

oracle dba_hist_sysmetric_summary

found this blog is helpful to get CPU and IO statistics on oracle database. http://shob-dbadmin.blogspot.ca/2012/12/how-to-find-total-io-of-database.html courtesy to  Shomil Bansal , below are hist writing, not mine. How to find total IO of the database instance Total IO of database instance is sum of the physical reads, physical writes and redo writes. There are several views to find these values. v$sysmetric  - Reports metric values for only the most current time sample 60 secs. v$sysmetric_summary  - Reports metric values for time sample of 1 hour. v$sysmetric_history  - Reports metric values every 60 sec from the time instance is up. Better way to analyse IO using this view to take deltas between two time periods. dba_hist_sysmetric_history  - All the above views are refreshed when the instance is restarted. This view, part of AWR, stores the historical stats. I have used this view for my report. Query: ====== set lines 350...

ORA_RMAN_SGA_TARGET

assume that we lost all the files of oracle database but we do have rman backup, when trying to bring up a dummy database before restore start, I get this error. RMAN> startup nomount force; WARNING: cannot translate ORA_RMAN_SGA_TARGET value startup failed: ORA-01078: failure in processing system parameters ORA-01565: error in identifying file '+DATA/PROD/spfilePROD.ora' ORA-17503: ksfdopn:2 Failed to open file +DATA/PROD/spfilePROD.ora ORA-15056: additional error message ORA-17503: ksfdopn:DGOpenFile05 Failed to open file +DATA/prod/spfileprod.ora ORA-17503: ksfdopn:2 Failed to open file +DATA/prod/spfileprod.ora ORA-15173: entry 'spfileprod.ora' does not exist in directory 'prod' ORA-06512: at line 4 starting Oracle instance without parameter file for retrival of spfile RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =================================...