Creating a RAC Physical Standby Database Using DBCA with the -createDuplicateDB -createAsStandby Option
In this blog, we will guide you through the steps to create a
Physical Standby database using DBCA with the -createDuplicateDB
-createAsStandby option in a RAC environment.
The environment consists of:
Primary:
- Hosts:
dbsrv01.localdomain, dbsrv02.localdomain.
- Oracle
RAC 19c with Release Update (RU) 19.23, database named
"master".
- Operating
System: Oracle Linux 8.
Physical Standby:
- Hosts:
dbsrv03.localdomain, dbsrv04.localdomain.
- Oracle
RAC 19c with Release Update (RU) 19.23, database named "masters".
- Operating System: Oracle Linux 8.
master (Primary) |
masters (Physical Standby) |
1.
Cluster Configuration:cluster has two active nodes dbsrv01 and dbsrv02
with SCAN master-scan, ASM diskgroup +DATA, +OCRVOTE and +RECO and configured
with a database named master.
[root@dbsrv01 ~]# su - grid [grid@dbsrv01 ~]$ olsnodes -n -s dbsrv01
1 Active dbsrv02
2 Active
[grid@dbsrv01
~]$ srvctl config scan SCAN
name: master-scan, Network: 1 [grid@dbsrv01 ~]$ asmcmd ls DATA/ OCRVOTE/ RECO/
[grid@dbsrv01
~]$ su - oracle Password: [oracle@dbsrv01 ~]$ srvctl config database master [oracle@dbsrv01 ~]$ srvctl status database -db master Instance
master1 is running on node dbsrv01 Instance
master2 is running on node dbsrv02
|
1.
Cluster Configuration:cluster has two active nodes dbsrv03 and dbsrv04
with SCAN masters-scan, ASM diskgroup +DATA, +OCRVOTE and +RECO.
[root@dbsrv03
~]# su – grid [grid@dbsrv03
~]$ olsnodes -n -s dbsrv03
1 Active dbsrv04
2 Active
[grid@dbsrv03
~]$ srvctl config scan SCAN
name: masters-scan, Network: 1 [grid@dbsrv03 ~]$ asmcmd ls DATA/ OCRVOTE/ RECO/ |
2.
Configure net services for standby on both db nodes. [oracle@dbsrv01 ~]$ cd $ORACLE_HOME/network/admin [oracle@dbsrv01
admin]$ cat tnsnames.ora #
tnsnames.ora Network Configuration File:
/u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora #
Generated by Oracle configuration tools.
MASTER
= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =
master-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = master) ) )
MASTERS
= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =
masters-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = masters) ) )
|
2.
While running dbca -createAsStandby, it configures a temporary static
listener on the current node, creates the tnsnames.ora file under
$ORACLE_HOME/network/admin on both nodes and configures the net services for
the standby database. |
3.
Configure the archivelog destination and enable archivelog mode.
[oracle@dbsrv01
~]$ srvctl stop database -db master [oracle@dbsrv01
~]$ srvctl start database -db master -startoption mount [oracle@dbsrv01
~]$ sqlplus / as sysdba
SQL*Plus:
Release 19.0.0.0.0 - Production on Sun Jan 5 22:16:06 2025 Version
19.23.0.0.0 Copyright
(c) 1982, 2023, Oracle. All rights
reserved.
Connected
to: Oracle
Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version
19.23.0.0.0
SQL>
alter system set log_archive_dest_1='location=+RECO
valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=master' scope=both sid='*';
System
altered.
SQL>
alter database archivelog;
Database
altered.
SQL>
exit Disconnected
from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version
19.23.0.0.0
[oracle@dbsrv01
~]$ srvctl stop database -db master [oracle@dbsrv01
~]$ srvctl start database -db master
|
3.
Here is the output showing that, As part of the DBCA process, a static
listener and tnsnames.ora file were created, along with the standby configuration of
net service names.
[oracle@dbsrv03
~]$ ps -ef |grep tns root 27 2
0 10:15 ? 00:00:00
[netns] grid 4968 1
0 10:20 ? 00:00:00
/u01/app/19.3.0/grid/bin/tnslsnr LISTENER -no_crs_notify -inherit grid 14815 1
0 10:26 ? 00:00:03
/u01/app/19.3.0/grid/bin/tnslsnr ASMNET1LSNR_ASM -no_crs_notify -inherit grid 15771 1
0 10:26 ? 00:00:00
/u01/app/19.3.0/grid/bin/tnslsnr LISTENER_SCAN1 -no_crs_notify -inherit oracle 86656 1
0 11:47 ? 00:00:00
/u01/app/oracle/product/19.3.0/dbhome_1/bin/tnslsnr LISTENER20250107114612
-inherit oracle 97272
35606 0 12:06 pts/0 00:00:00 grep --color=auto tns
[oracle@dbsrv03
~]$ cat $ORACLE_HOME/network/admin/listener.ora #
listener.ora Network Configuration File:
/u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora #
Generated by Oracle configuration tools.
SID_LIST_LISTENER20250107114612
= (SID_LIST = (SID_DESC = (SID_NAME = masters1) ) )
LISTENER20250107114612
= (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =
dbsrv03.localdomain)(PORT = 1522)) )
[oracle@dbsrv03
~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora #
tnsnames.ora Network Configuration File:
/u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora #
Generated by Oracle configuration tools.
MASTERS
= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =
masters-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = masters) ) )
|
4.
Enable force logging and configure dataguard parameters.
[oracle@dbsrv01
~]$ sqlplus / as sysdba
SQL*Plus:
Release 19.0.0.0.0 - Production on Sun Jan 5 20:57:58 2025 Version
19.23.0.0.0
Copyright
(c) 1982, 2023, Oracle. All rights
reserved.
Connected
to: Oracle
Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version
19.23.0.0.0
SQL>
alter database force logging;
Database
altered.
SQL>
alter system set log_archive_config='dg_config=(master,masters)' scope=both
sid='*' ;
System
altered.
SQL>
alter system set log_archive_dest_2='service=masters lgwr async
valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=masters' scope=both
sid='*';
System
altered.
SQL>
alter system set fal_server='masters' scope=both sid='*';
System
altered.
SQL>
alter system set standby_file_management='auto' scope=both sid='*';
System
altered.
SQL>
SELECT name,value from v$parameter WHERE name IN
('log_archive_config','log_archive_dest_1','log_archive_dest_2','fal_server',
'standby_file_management');
NAME VALUE -------------------------
------------------------------------------------------------------------------------------ log_archive_dest_1 location=+RECO
valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=master log_archive_dest_2 service=masters lgwr async
valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=masters fal_server masters log_archive_config dg_config=(master,masters) standby_file_management auto
SQL>
select name,open_mode,database_role,force_logging,log_mode from gv$database;
NAME OPEN_MODE DATABASE_ROLE FORCE_LOGGING LOG_MODE ---------
--------------- ---------------- -------------------- ------------ MASTER READ WRITE PRIMARY YES ARCHIVELOG MASTER READ WRITE PRIMARY YES ARCHIVELOG
|
|
5.
Create Standby Redo logs. SQL> select thread#,group#,bytes/1024/1024 mb,status from v$log; THREAD#
GROUP# MB STATUS ----------
---------- ---------- ---------------- 1 11 200 CURRENT 1 12 200 INACTIVE 2 13 200 CURRENT 2 14 200 INACTIVE
SQL>
alter database add standby logfile thread 1 group 5 ('+RECO') size 200m,group
6 ('+RECO') size 200m,group 7 ('+RECO') size 200m; Database altered.
SQL>
alter database add standby logfile thread 2 group 8 ('+RECO') size 200m,group
9 ('+RECO') size 200m,group 10 ('+RECO') size 200m; Database altered.
SQL>
select group#,type,member from v$logfile; GROUP# TYPE MEMBER ----------
------- ------------------------------------------------ 5 STANDBY
+RECO/MASTER/ONLINELOG/group_5.312.1189631315 6 STANDBY
+RECO/MASTER/ONLINELOG/group_6.313.1189631321 7 STANDBY
+RECO/MASTER/ONLINELOG/group_7.314.1189631323 8 STANDBY
+RECO/MASTER/ONLINELOG/group_8.315.1189631333 9 STANDBY
+RECO/MASTER/ONLINELOG/group_9.316.1189631337 10 STANDBY
+RECO/MASTER/ONLINELOG/group_10.317.1189631341 11 ONLINE
+RECO/MASTER/ONLINELOG/group_11.355.1189774295 12 ONLINE
+RECO/MASTER/ONLINELOG/group_12.356.1189774297 13 ONLINE
+RECO/MASTER/ONLINELOG/group_13.357.1189774307 14 ONLINE
+RECO/MASTER/ONLINELOG/group_14.358.1189774309
10
rows selected.
|
|
|
4.
Run DBCA to create a RAC physical standby database named "masters"
by passing the required parameter values as follows. [oracle@dbsrv03 ~]$ dbca -silent -createDuplicateDB -gdbname master -sid masters -primaryDBConnectionString master-scan:1521/master -sysPassword "sys" -createAsStandby -dbUniqueName masters -initParams fal_server=master -databaseConfigType RAC -adminManaged -nodelist dbsrv03,dbsrv04 Prepare
for db operation 22%
complete Listener
config step 44%
complete Auxiliary
instance creation 67%
complete RMAN
duplicate 89%
complete Post
duplicate database operations 100%
complete
Look
at the log file
"/u01/app/oracle/cfgtoollogs/dbca/masters/masters.log" for further
details.
|
|
5.
Configure dataguard parameters and start the MRP apply process. [oracle@dbsrv03 ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jan 6 19:19:23 2025 Version
19.23.0.0.0
Copyright (c) 1982, 2023, Oracle. All rights reserved. Connected
to: Oracle
Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version
19.23.0.0.0
SQL>
select name,db_unique_name,open_mode,database_role from gv$database;
NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE ---------
--------------- --------------- ---------------- MASTER masters READ ONLY PHYSICAL STANDBY MASTER masters READ ONLY PHYSICAL STANDBY
SQL>
SELECT name,value from v$parameter WHERE name IN
('log_archive_config','log_archive_dest_1','log_archive_dest_2','fal_server',
'standby_file_management');
NAME VALUE -------------------------
------------------------------------------------------------------------------------------ log_archive_dest_1 log_archive_dest_2 fal_server master log_archive_config dg_config=(master,masters) standby_file_management AUTO
SQL> alter system set log_archive_dest_1='location=+RECO valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=masters' scope=both sid='*'; System
altered.
SQL> alter system set log_archive_dest_2='service=master lgwr async valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=master' scope=both sid='*'; System
altered.
SQL>
SELECT name,value from v$parameter WHERE name IN
('log_archive_config','log_archive_dest_1','log_archive_dest_2','fal_server',
'standby_file_management');
NAME VALUE -------------------------
------------------------------------------------------------------------------------------ log_archive_dest_1 location=+RECO
valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=masters log_archive_dest_2 service=master lgwr async
valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=master fal_server master log_archive_config dg_config=(master,masters) standby_file_management AUTO
SQL> alter database recover managed standby database disconnect from session; Database
altered.
SQL>
select thread#,sequence#,block#,name,role,action from v$dataguard_process;
THREAD#
SEQUENCE# BLOCK# NAME ROLE ACTION ----------
---------- ---------- ----- ------------------------ ------------ 0 0 0 LGWR log writer IDLE 0 0 0 TMON redo transport monitor IDLE 0 0 0 TT00 gap manager IDLE 0 0 0 TT01 redo transport timer IDLE 0 0 0 ARC0 archive local IDLE 0 0 0 ARC1 archive redo IDLE 0 0 0 ARC2 archive redo IDLE 0 0 0 ARC3 archive redo IDLE 0 0 0 MRP0 managed recovery IDLE 1 112 340 PR00 recovery logmerger APPLYING_LOG 0 0 0 PR01 recovery apply slave IDLE 0 0 0 PR02 recovery apply slave IDLE 2 35 9955 rfs RFS async RECEIVING 0 0 0 rfs RFS archive IDLE 2 35 0 rfs RFS ping IDLE 0 0 0 rfs RFS archive IDLE 0 0 0 rfs RFS archive IDLE 1 112 49170 rfs RFS async RECEIVING 0 0 0 rfs RFS archive IDLE 1 112 0 rfs RFS ping IDLE
20
rows selected.
SQL>
select name,db_unique_name,open_mode,database_role from gv$database;
NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE ----------
--------------- -------------------- ---------------- MASTER masters READ ONLY WITH APPLY PHYSICAL
STANDBY MASTER masters READ ONLY WITH APPLY PHYSICAL
STANDBY SQL> exit Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.23.0.0.0 [oracle@dbsrv03 ~]$ srvctl status database
-db masters Instance masters1 is running on node
dbsrv03 Instance masters2 is running on node dbsrv04
|
Comments
Post a Comment