This guide will take you through the steps configure Oracle Grid Infrastructure 12c and Database 12c including RAC to RAC Data Guard and Data Broker configuration in a Primary and Physical Standby environment for high availability.
- Prerequisites
You need to download the following software if you do not have already.
1 2 3 | Oracle Linux 6 (64-bit) Oracle Grid Infrastructure 12c (64-bit) Oracle Database 12c (64-bit) |
- Environment
You need four (Physical or Virtual) machines with 2 network adapters and at least 4GB memory requirement on each machine.

- Production database is up and running with 2 node RAC
Grid Version : 12.1.0.2.0
Oracle Version : 12.1.0.2
- Standby Grid Infrastructure is installed.
- ASM is up and running.
- Oracle Binaries are installed.
1 2 3 4 5 6 7 | 1. Step : Check standby database cluster services are running [oracle@dgrac1 ~]$ crsctl check crs CRS-4638: Oracle High Availability Services is online CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online |
1 2 3 4 5 | 2. Step : Prepare the Primary Database : Check force logging at primary database and enable it if not enabled. SQL> ALTER DATABASE FORCE LOGGING; SQL> SELECT FORCE_LOGGING FROM V$DATABASE; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 3. Step : Check the archive log enabled or not enable it. SQL> select name,open_mode,log_mode from v$database; NAME OPEN_MODE LOG_MODE -------- - ---------- ------------------- RACDB READ WRITE ARCHIVELOG SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 31 Next log sequence to archive 33 Current log sequence 33 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 4. Step : Check details no of redo log files and size of each redo log file. SQL> SELECT GROUP#,BYTES/1024/1024 AS MB FROM V$LOG ; GROUP# MB ------- -------- 1 50 2 50 3 50 1 50 2 50 3 50 SQL> SELECT THREAD#,INSTANCE FROM GV$THREAD; THREAD# INSTANCE ------------------------- 1 racdb1 2 racdb2 |
We can see here 6 redo log files and with each file having size 50 MB. So we will create 8 standby redo log files.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '+DATA' SIZE 50M; Database altered. SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '+DATA' SIZE 50M; Database altered. SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '+DATA' SIZE 50M; Database altered. SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '+DATA' SIZE 50M; Database altered. SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 '+DATA' SIZE 50M; Database altered. SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 '+DATA' SIZE 50M; Database altered. SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 '+DATA' SIZE 50M; Database altered. SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 '+DATA' SIZE 50M; Database altered. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 5. Step : Set initialization parameters necessary for data guard environment. SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=RACDB SCOPE=SPFILE SID='*'; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=DGRACDB LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DGRACDB' SID='*'; System altered. SQL> ALTER SYSTEM SET FAL_SERVER=DGRACDB SID='*'; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='dg_config=(RACDB,DGRACDB) SID='*'; System altered. SQL> ALTER SYSTEM SET FAL_CLIENT=RACDB SID='*'; System altered. SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*'; System altered. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 6. Step : Set tnsnames.ora file and listener file. Tnsnames .ora RACDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = racdb) ) ) DGRACDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dgrac-scan.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dgracdb) ) ) We need to do a static entry of listener at standby database : (That's is the most Important thing U need both node ) SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=dgracdb1) (ORACLE_HOME=/u02/oracle/product/11.2.0/dbhome_1) ) ) |
1 2 3 | 7. Step : Restart listener and restart database so parameters can take effect of new value. srvctl reload listener -l LISTENER_NAME |
1 2 3 | 8. Now create pfile for standby database SQL> create pfile='/u01/app/oracle/initdgracdb1.ora' from spfile; |
1 2 3 4 5 | 9. Now backup password file from primary database using the following commands. This will be required later on standby database configuration. [oracle@rac1 ~]$ (set grid environment) [oracle@rac1 ~]$ asmcmd pwget --dbuniquename racdb [oracle@rac1 ~]$ asmcmd pwcopy --dbuniquename racdb '+DATA/RACDB/orapwracdb' '/u01/app/oracle/orapwdgracdb' |
1 2 3 4 5 6 7 8 9 | 10. Step 11: Copy pfile and password file to both standby servers. [oracle@rac1 ~]$ cd /u01/app/oracle [oracle@rac1 oracle]$ scp initdgracdb1.ora rac1:$ORACLE_HOME/dbs/initdbracdb1.ora [oracle@rac1 oracle]$ scp initdgracdb1.ora rac2:$ORACLE_HOME/dbs/initdbracdb1.ora [oracle@rac1 oracle]$ scp orapwdgracdb dgrac1:$ORACLE_HOME/dbs/orapwdgracdb1 [oracle@rac1 oracle]$ scp orapwdgracdb dgrac2:$ORACLE_HOME/dbs/orapwdgracdb2 |
1 | Data Guard Configuration - Standby Site |
Login to DGRAC1, DGRAC2 using oracle user and perform the following tasks to prepare Standby site data guard configuration.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | The following highlighted parameters need to be modified in our parameter file initdgracdb.ora for standby database creation in a data guard environment. [oracle@dgrac1 ~]$ cat /u01/app/oracle/product/12.1.0/db_1/dbs/initdgrac1.ora dgracdb1.__data_transfer_cache_size=0 dgracdb2.__data_transfer_cache_size=0 dgracdb1.__db_cache_size=184549376 dgracdb2.__db_cache_size=452984832 dgracdb1.__java_pool_size=16777216 dgracdb2.__java_pool_size=16777216 dgracdb1.__large_pool_size=419430400 dgracdb2.__large_pool_size=33554432 dgracdb1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment dgracdb2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment dgracdb1.__pga_aggregate_target=520093696 dgracdb2.__pga_aggregate_target=570425344 dgracdb1.__sga_target=973078528 dgracdb2.__sga_target=922746880 dgracdb1.__shared_io_pool_size=0 dgracdb2.__shared_io_pool_size=33554432 dgracdb1.__shared_pool_size=335544320 dgracdb2.__shared_pool_size=369098752 dgracdb1.__streams_pool_size=0 dgracdb2.__streams_pool_size=0 *.audit_file_dest='/u01/app/oracle/admin/dgracdb/adump' *.audit_trail='db' *.cluster_database=true *.compatible='12.1.0.0.0' *.control_files='+DGDATA/CONTROLFILE/DGRACDB/control01.ctl','+DGDATA/CONTROLFILE/DGRACDB/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='racdb' *.db_unique_name='dgracdb' *.db_recovery_file_dest='+DGDATA' *.db_recovery_file_dest_size=5025m *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=dgracdbXDB)' *.fal_server='racdb' dgracdb1.instance_number=1 dgracdb2.instance_number=2 *.log_archive_config='DG_CONFIG=(racdb,dgracdb)' *.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dgracdb' *.log_archive_dest_2='service=racdb async valid_for=(online_logfile,primary_role) db_unique_name=racdb' *.log_archive_format='%t_%s_%r.arc' *.log_archive_max_processes=8 *.memory_target=1416m *.open_cursors=300 *.processes=1024 *.remote_login_passwordfile='EXCLUSIVE' *.sessions=1131 *.standby_file_management='AUTO' dgracdb2.thread=2 dgracdb1.thread=1 dgracdb2.undo_tablespace='UNDOTBS2' dgracdb1.undo_tablespace='UNDOTBS1' |
1 2 3 4 5 6 7 8 9 10 11 | 11. Now we need to create the ASM directories on standby node DGRAC1 using the following commands. [oracle@dgrac1 ~]$ mkdir /u01/app/oracle/admin/dgracdb/adump [oracle@dgrac2 ~]$ mkdir /u01/app/oracle/admin/dgracdb/adump [oracle@ dgrac1 ~]$ set Grid environment [oracle@ dgrac1 ~]$ asmcmd mkdir DGDATA/DGRACDB [oracle@ dgrac1 ~]$ asmcmd ASMCMD> cd DGDATA/ DGRACDB ASMCMD> mkdir PARAMETERFILE DATAFILE CONTROLFILE TEMPFILE ONLINELOG ARCHIVELOG STANDBYLOG |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 12. Step 10: Start the database in the nomount state using pfile. (prepare earlier from copy primary database.) [oracle@ dgrac1 ~]$ cd /u01/app/oracle/product/12.1.0/db_1/dbs [oracle@dgrac dbs]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Wed Nov 6 15:50:33 2019 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> startup nomount pfile ='initdgracdb1.ora' ORACLE instance started. Total System Global Area 238034944 bytes Fixed Size 2252016 bytes Variable Size 180355856 bytes Database Buffers 50331648 bytes Redo Buffers 5095424 bytes SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP, Data Mining and Real Application Testing options |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 13. Step : Create a RMAN script to create a standby database using duplicate database command. [oracle@dgrac1 ~]$ rman target sys/oracle@racdb auxiliary sys/oracle@dgracdb Recovery Manager: Release 12.1.0.2.0 - Production on Wed Nov 6 14:01:15 2019 Version 12.1.0.2.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. connected to target database: RACDB(DBID=934175012) connected to auxiliary database: RACDB (not start) RMAN>run { DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE SPFILE set 'db_unique_name'='dgracdb' set instance_name='dgracdb1' set instance_number='1' set control_files='+DGDATA' set remote_listener='dgrac-scan:1521' set db_create_online_log_dest_1='+DGDATA' set db_create_online_log_dest_2='+DGDATA' set db_recovery_file_dest='+DGDATA' set db_file_name_convert='+DATA','+DGDATA' set log_file_name_convert='+DATA','+DGDATA' set audit_file_dest='/u01/app/oracle/admin/racdb/adump' set core_dump_dest='/u01/app/oracle/admin/racdb/cdump' nofilenamecheck; } Disk group name in my standby database is DGDATA so I have used db_file_name_Convert and log_file_name_convert accordingly. |
1 2 3 4 5 6 7 | 14. Step : Verify instance is running fine or not. SQL> SELECT NAME,DB_UNIQUE_NAME,INSTANCE_NAME,DATABASE_ROLE,OPEN_MODE FROM GV$DATABASE,GV$INSTANCE; NAME DB_UNIQUE_NAME INSTANCE_NAME DATABASE_ROLE OPEN_MODE ------- ------------------ ------------ -------------- ------------- RACDB dgracdb dgracdb1 PHYSICAL STANDBY MOUNTED |
1 2 3 4 5 6 7 8 | 15. Step : Add the database using srvctl Now that the Standby database has been started with the cluster parameters enabled, we need to create spfile in the central location on ASM diskgroup. SQL> create spfile='+DGDATA/DGRACDB/PARAMETERFILE/spfiledgracdb.ora' from pfile='/u01/app/oracle/products/12.1.0/db_1/dbs/initdgracdb1.ora'; SQL> shutdown immediate; SQL> exit |
Now we need to check whether the standby database gets started using our new spfile which we have created on ASM diskgroup.
1 2 3 4 5 | Rename the old pfile and spfile in $ORACLE_HOME/dbs directory as shown below [oracle@dgrac1 ~]$ cd $ORACLE_HOME/dbs [oracle@dgrac1 ~]$ mv initdgracdb1.ora initdgracdb.ora.orig [oracle@dgrac1 ~]$ mv spfiledgracdb.ora spfiledgracdb.ora.orig |
1 2 3 4 5 6 | Now create the below initdgracdb1.ora file on dgrac1 and initdgracdb2.ora file on dgrac2 under $ORACLE_HOME/dbs with the spfile entry so that the instance can start with the newly created spfile. [oracle@dgrac1 ~]$ cd $ORACLE_HOME/dbs [oracle@dgrac1 ~]$ vi initdgracdb1.ora spfile='+DGDATA/DGRACDB/PARAMETERFILE/spfiledgracdb.ora' |
1 2 3 | Copy initdgracdb1.ora to dgrac2 as $ORACLE_HOME/dbs/initdgracdb2.ora [oracle@dgrac1 ~]$ scp -p $ORACLE_HOME/dbs/initdgracdb1.ora dgrac2:$ORACLE_HOME/dbs/initdgracdb2.ora |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | [oracle@dgrac1 ~]$ SET DB ENVIRONMENT [oracle@dgrac1 ~]$ sqlplus / as sysdba SQL> startup mount; ORACLE instance started. Total System Global Area 1358954496 bytes Fixed Size 2924208 bytes Variable Size 469762384 bytes Database Buffers 872415232 bytes Redo Buffers 13852672 bytes Database mounted. SQL> select name, open_mode from v$database; NAME OPEN_MODE --------- -------------------- racdb MOUNTED SQL> show parameter spfile; NAME TYPE VALUE ----------- --------- ------------------------------- spfile string +DGDATA/DGRACDB/PARAMETERFILE/spfiledgracdb.ora |
Now that the database have been started using the spfile on shared location, we will add the database in cluster. Execute the below command to add the database and its instances in the cluster configuration.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | [oracle@dgrac1 ~]$ srvctl add database -db dgracdb -oraclehome $ORACLE_HOME -dbtype RAC -spfile +DGDATA/DGRACDB/PARAMETERFILE/spfiledgracdb.ora-role PHYSICAL_STANDBY -startoption MOUNT -stopoption IMMEDIATE -dbname racdb -diskgroup DGDATA [oracle@dgrac1 ~]$ srvctl add instance -db dgracdb -i dgracdb1 -n dgrac1 [oracle@dgrac1 ~]$ srvctl add instance -db dgracdb -i dgracdb2 -n dgrac2 [oracle@dgrac1 ~]$ srvctl config database -d dgracdb Database unique name: dgracdb Database name: racdb Oracle home: /u01/app/oracle/product/12.1.0/db_1 Oracle user: oracle Spfile: +DGDATA/DGRACDB/PARAMETERFILE/spfiledgracdb.ora Password file: Domain: Start options: open Stop options: immediate Database role: PHYSICAL_STANDBY Management policy: AUTOMATIC Server pools: dgracdb Database instances: dgracdb1,dgracdb2 Disk Groups: DATA Mount point paths: Services: Type: RAC Start concurrency: Stop concurrency: Database is administrator managed |
From Primary node rac1 copy the password file again to the Standby node dgrac1.
Login on standby node dgrac1 and copy the password file to ASM disk group as shown below.
1 2 3 4 5 | [oracle@dgrac1 ~]$ set GRID environment [oracle@dgrac1 ~]$ asmcmd ASMCMD> pwcopy /u01/app/oracle/product/12.1.0/db_1/dbs/orapwdgracdb GDATA/DGRACDB/PASWORDFILE/ copying /u01/app/oracle/product/12.1.0/db_1/dbs/orapwdgracdb -> +DGDATA/DGRACDB/PASWORDFILE /orapwdgracdb |
Now we need to tell database where to look for password file using srvctl command as shown an example below
1 2 | [oracle@dgrac1 ~]$ Set db_env [oracle@dgrac1 ~]$ srvctl modify database -d dgracdb -pwfile +DGDATA/DGRACDB/PASWORDFILE /orapwdgracdb |
At this point, start the standby RAC database but before starting the standby RAC database, shutdown the already running instance as shown an example below
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [oracle@dgrac1 ~]$ db_env [oracle@dgrac1 ~]$ sqlplus / as sysdba shutdown immediate; ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> exit Now we can start the database using the following command. [oracle@dgrac1 ~]$ srvctl start database -d dgracdb [oracle@dgrac1 ~]$ srvctl status database -d dgracdb Output Instance dgracdb1 is running on node dgrac1 Instance dgracdb2 is running on node dgrac2 |
Now that the standby single instance is converted to standby RAC database, the final step is to start the recovery (MRP) process using the following command on standby node.
1 2 3 | [oracle@dgrac1 ~]$ sqlplus / as sysdba SQL> alter database recover managed standby database disconnect from session; SQL> exit |
Data guard Broker Configuration 12c
Since our Primary and Standby databases are RAC, we will change the default location of DG Broker files to a centralized location as shown an example below
Add an entry similar to below at the end of listener.ora file on dgrac1 and dgrac2. It is required for data guard broker configuration.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [oracle@dgrac1 ~]$ vi /u01/app/12.1.0/grid/network/admin/listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = dgracdb) (GLOBAL_DBNAME=dgracdb_DGMGRL) (ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1) ) ) Save and close ( then Restart listener) [oracle@dgrac1 ~]$ srvctl stop listener -listener LISTENER [oracle@dgrac1 ~]$ srvctl start listener -listener LISTENER [oracle@dgrac2 ~]$ vi /u01/app/12.1.0/grid/network/admin/listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = dgracdb) (GLOBAL_DBNAME = dgracdb_DGMGRL) (ORACLE_HOME = /u01/app/oracle/product/12.1.0/db_1) ) ) Save and close [oracle@dgrac2 ~]$ srvctl stop listener -listener LISTENER [oracle@dgrac2 ~]$ srvctl start listener -listener LISTENER |
At this stage, we have completed the RAC to RAC data guard configuration but still few more steps needed.
Login as oracle user on Primary node rac1 and execute the below commands.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [oracle@rac1 ~]$ grid_env [oracle@rac1 ~]$ asmcmd mkdir DATA/RACDB/DGBROKERCONFIGFILE [oracle@rac1 ~]$ db_env [oracle@rac1 ~]$ sqlplus / as sysdba SQL> show parameter dg_broker_config NAME TYPE VALUE ------ ----------- ----------- ------------------- dg_broker_config_file1 string /u01/app/oracle/products/12.1.0/db/dbs/dr1pdbrac.dat dg_broker_config_file2 string /u01/app/oracle/products/12.1.0/db/dbs/dr2pdbrac.dat SQL> alter system set dg_broker_config_file1='+ DATA/RACDB/DGBROKERCONFIGFILE /dr1pdbrac.dat'; SQL> alter system set dg_broker_config_file2='+ DATA/RACDB/DGBROKERCONFIGFILE /dr2pdbrac.dat'; SQL> alter system set dg_broker_start=TRUE; SQL> alter system set LOG_ARCHIVE_DEST_2='' scope=both; SQL> exit |
Similarly, change the settings on Standby database server.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [oracle@dgrac1 ~]$ grid_env [oracle@dgrac1 ~]$ asmcmd mkdir DGDATA/DGRACDB/DGBROKERCONFIGFILE [oracle@dgrac1 ~]$ db_env [oracle@dgrac1 ~]$ sqlplus / as sysdba SQL> alter system set dg_broker_config_file1='+DGDATA/DGRACDB/DGBROKERCONFIGFILE /dr1dgracdb.dat'; SQL> alter system set dg_broker_config_file2='+DGDATA/DGRACDB/DGBROKERCONFIGFILE /dr2dgracdb.dat'; SQL> alter system set dg_broker_start=TRUE; SQL> alter system set LOG_ARCHIVE_DEST_2='' scope=both; SQL> exit |
Register the primary and standby databases in the broker configuration as shown an example below
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [oracle@rac1 ~]$ dgmgrl Welcome to DGMGRL, type "help" for information. DGMGRL> connect sys/oracle@racdb Connected as SYSDBA. DGMGRL> CREATE CONFIGURATION dg_config AS PRIMARY DATABASE IS racdb CONNECT IDENTIFIER IS racdb; Output Configuration "dg_config" created with primary database "racdb" DGMGRL> ADD DATABASE dgracdb AS CONNECT IDENTIFIER IS dgracdb MAINTAINED AS PHYSICAL; Output Database "dgracdb" added |
Now we need to enable the broker configuration and check if the configuration is enabled successfully or not.
1 2 3 4 5 6 7 8 9 10 11 12 13 | DGMGRL> ENABLE CONFIGURATION; Enabled. DGMGRL> show configuration; Configuration - dg_config Protection Mode: MaxPerformance Members: racdb - Primary database dgracdb - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS |
Once the broker configuration is enabled, the MRP process should start on the Standby database server.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | DGMGRL> show database dgracdb Database - dgracdb Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 0 seconds ago) Apply Lag: 0 seconds (computed 0 seconds ago) Average Apply Rate: 39.00 KByte/s Real Time Query: OFF Instance(s): dgracdb1 (apply instance) dgracdb2 Database Status: SUCCESS |
Now that the MRP process is running, login to both Primary and Standby database and check whether the logs are in sync or not.
Below are some extra commands which you can use and check status of database.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | DGMGRL> VALIDATE DATABASE racdb; Database Role: Primary database Ready for Switchover: Yes Flashback Database Status: racdb: ON DGMGRL> VALIDATE DATABASE dgracdb; Database Role: Physical standby database Primary Database: racdb Ready for Switchover: Yes Ready for Failover: Yes (Primary Running) Flashback Database Status: racdb: ON dgracdb: Off |
Perform switchover activity from primary database (racdb) to physical standby database (dgracdb) using DGMGRL prompt.
1 2 3 4 5 6 7 | [oracle@rac1 admin]$ dgmgrl DGMGRL for Linux: Version 12.1.0.2.0 - 64bit Production Copyright (c) 2000, 2013, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. DGMGRL> connect sys/oracle@racdb Connected as SYSDBA. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | DGMGRL> show configuration verbose; Configuration - dg_config Protection Mode: MaxPerformance Members: racdb - Primary database dgracdb - Physical standby database Properties: FastStartFailoverThreshold = '30' OperationTimeout = '30' TraceLevel = 'USER' FastStartFailoverLagLimit = '30' CommunicationTimeout = '300' ObserverReconnect = '0' FastStartFailoverAutoReinstate = 'TRUE' FastStartFailoverPmyShutdown = 'TRUE' BystandersFollowRoleChange = 'ALL' ObserverOverride = 'FALSE' ExternalDestination1 = '' ExternalDestination2 = '' PrimaryLostWriteAction = 'CONTINUE' Fast-Start Failover: DISABLED Configuration Status: SUCCESS |
1 2 3 4 5 6 7 8 9 10 | DGMGRL> show database racdb Database - racdb Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): racdb1 racdb2 Database Status: SUCCESS |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | DGMGRL> show instance verbose 'racdb1' on database 'racdb'; Instance 'racdb1' of database 'racdb' Host Name: rac1.localdomain PFILE: Properties: StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.81)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=racdb_DGMGRL)(INSTANCE_NAME=racdb1)(SERVER=DEDICATED)))' StandbyArchiveLocation = 'USE_DB_RECOVERY_FILE_DEST' AlternateLocation = '' LogArchiveTrace = '0' LogArchiveFormat = '%t_%s_%r.arc' TopWaitEvents = '(monitor)' Instance Status: SUCCESS |
1 2 3 4 5 6 7 8 9 10 11 12 13 | DGMGRL> show instance verbose 'racdb2' on database 'racdb'; Instance 'racdb2' of database 'racdb' Host Name: rac2.localdomain PFILE: Properties: StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.82)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=racdb_DGMGRL)(INSTANCE_NAME=racdb2)(SERVER=DEDICATED)))' StandbyArchiveLocation = 'USE_DB_RECOVERY_FILE_DEST' AlternateLocation = '' LogArchiveTrace = '0' LogArchiveFormat = '%t_%s_%r.arc' TopWaitEvents = '(monitor)' Instance Status: |
1 2 3 4 5 6 7 8 9 10 11 12 13 | DGMGRL> switchover to dgracdb; Performing switchover NOW, please wait... Operation requires a connection to instance "dgracdb1" on database "dgracdb" Connecting to instance "dgracdb1"... Connected as SYSDBA. New primary database "dgracdb" is opening... Operation requires startup of instance "racdb2" on database "racdb" Starting instance "racdb2"... ORACLE instance started. Database mounted. Database opened. Switchover succeeded, new primary is "dgracdb" |
1 2 3 4 5 6 7 8 9 10 | DGMGRL> show configuration; Configuration - dg_config Protection Mode: MaxPerformance Databases: dgracdb - Primary database pdbrac - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS |