Setting up a robust disaster recovery (DR) solution is a critical task for any Oracle Database Administrator. While Oracle Data Guard provides a high-level framework, understanding the manual steps to build a physical standby database from scratch is an essential skill. This process gives you granular control and a deeper understanding of the underlying architecture.
We will walk through every essential command and configuration file. This guide covers everything from preparing the primary database and using RMAN for the initial clone, to creating the standby control file, configuring network listeners for log transport, and starting the redo apply process.
Whether you are building a new DR environment or refreshing your skills, follow this detailed tutorial to successfully build a production-ready Oracle 19c Physical Standby Database.
Environment details:
Primary Side Configuration:
Step 1: Change Archivelog Mode and Force Logging Mode.
SQL> startup mount ORACLE instance started. Total System Global Area 1543502248 bytes Fixed Size 8939944 bytes Variable Size 1056964608 bytes Database Buffers 469762048 bytes Redo Buffers 7835648 bytes Database mounted. SQL> alter database archivelog; Database altered. SQL> alter database open; Database altered. SQL> alter database force logging; Database altered. SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 12 Next log sequence to archive 14 Current log sequence 14 SQL> select force_logging from v$database; FORCE_LOGGING --------------------------------------- YES
Step 2: Configure a Standby Redo Log file on Primary Database.
SQL> select a.group#, a.member, b.bytes/1024/1024 as "In MB" FROM v$logfile a, v$log b WHERE a.group# = b.group#;
GROUP# MEMBER In MB
------ ---------------------------------------- -----
3 /home/app/oracle/oradata/ORCL/redo03.log 200
2 /home/app/oracle/oradata/ORCL/redo02.log 200
1 /home/app/oracle/oradata/ORCL/redo01.log 200
SQL> alter database add standby logfile group 4 ('/home/app/oracle/oradata/ORCL/redo04.log') size 200m;
Database altered.
SQL> alter database add standby logfile group 5 ('/home/app/oracle/oradata/ORCL/redo05.log') size 200m;
Database altered.
SQL> alter database add standby logfile group 6 ('/home/app/oracle/oradata/ORCL/redo06.log') size 200m;
Database altered.
Step 3: Set Parameters on Primary Database.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,orcldr)' scope=both; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/home/app/oracle/orcl/archives VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' scope=both; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcldr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldr' scope=both; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=both; System altered. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=both; System altered. SQL> ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE; System altered. SQL> ALTER SYSTEM SET fal_client=orcl scope=both; System altered. SQL> ALTER SYSTEM SET fal_server=orcldr scope=both; System altered. SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO; System altered. SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/home/app/oracle/oradata/ORCLDR','/home/app/oracle/oradata/ORCL' SCOPE=SPFILE; System altered. SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/home/app/oracle/oradata/ORCLDR','/home/app/oracle/oradata/ORCL' SCOPE=SPFILE; System altered. SQL> create pfile='/data/backup/initorcl_new.ora' from spfile; File created.
Step 4: Backup the Primary Database for Standby Creation.
[oracle@dba-simplified ~]$ rman target / Recovery Manager: Release 19.0.0.0.0 - Production on Mon Oct 20 22:57:54 2025 Version 19.28.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1734184994) RMAN> run { allocate channel ch1 type disk; allocate channel ch2 type disk; allocate channel ch3 type disk; backup database format '/data/backup/full_%d_%u_%s'; sql 'alter system archive log current'; backup archivelog all format '/data/backup/arch_%d_%u_%s'; backup current controlfile for standby format '/data/backup/Control_%d_%u_%s'; release channel ch1; release channel ch2; release channel ch3; } run 2> { 3> allocate channel ch1 type disk; 4> allocate channel ch2 type disk; 5> allocate channel ch3 type disk; 6> backup database format '/data/backup/full_%d_%u_%s'; 7> sql 'alter system archive log current'; 8> backup archivelog all format '/data/backup/arch_%d_%u_%s'; 9> backup current controlfile for standby format '/data/backup/Control_%d_%u_%s'; 10> release channel ch1; 11> release channel ch2; 12> release channel ch3; 13> } using target database control file instead of recovery catalog allocated channel: ch1 channel ch1: SID=277 device type=DISK allocated channel: ch2 channel ch2: SID=37 device type=DISK allocated channel: ch3 channel ch3: SID=237 device type=DISK Starting backup at 20-OCT-25 channel ch1: starting full datafile backup set channel ch1: specifying datafile(s) in backup set input datafile file number=00001 name=/home/app/oracle/oradata/ORCL/system01.dbf channel ch1: starting piece 1 at 20-OCT-25 channel ch2: starting full datafile backup set channel ch2: specifying datafile(s) in backup set input datafile file number=00003 name=/home/app/oracle/oradata/ORCL/sysaux01.dbf input datafile file number=00005 name=/home/app/oracle/oradata/ORCL/users02.dbf channel ch3: starting full datafile backup set channel ch3: specifying datafile(s) in backup set input datafile file number=00004 name=/home/app/oracle/oradata/ORCL/undotbs01.dbf input datafile file number=00007 name=/home/app/oracle/oradata/ORCL/users01.dbf channel ch3: starting piece 1 at 20-OCT-25 channel ch3: finished piece 1 at 20-OCT-25 piece handle=/data/backup/full_ORCL_0d46o20h_13 tag=TAG20251020T225825 comment=NONE channel ch3: backup set complete, elapsed time: 00:00:03 channel ch1: finished piece 1 at 20-OCT-25 piece handle=/data/backup/full_ORCL_0b46o20h_11 tag=TAG20251020T225825 comment=NONE channel ch1: backup set complete, elapsed time: 00:00:07 channel ch2: finished piece 1 at 20-OCT-25 piece handle=/data/backup/full_ORCL_0c46o20h_12 tag=TAG20251020T225825 comment=NONE channel ch2: backup set complete, elapsed time: 00:00:07 Finished backup at 20-OCT-25 Starting Control File and SPFILE Autobackup at 20-OCT-25 piece handle=/home/app/oracle/recovery_area/ORCL/autobackup/2025_10_20/o1_mf_s_1215039512_nhdwb0yx_.bkp comment=NONE Finished Control File and SPFILE Autobackup at 20-OCT-25 sql statement: alter system archive log current Starting backup at 20-OCT-25 current log archived channel ch1: starting archived log backup set channel ch1: specifying archived log(s) in backup set input archived log thread=1 sequence=14 RECID=1 STAMP=1215037822 channel ch1: starting piece 1 at 20-OCT-25 channel ch2: starting archived log backup set channel ch2: specifying archived log(s) in backup set input archived log thread=1 sequence=15 RECID=2 STAMP=1215039097 input archived log thread=1 sequence=16 RECID=3 STAMP=1215039097 channel ch2: starting piece 1 at 20-OCT-25 channel ch3: starting archived log backup set channel ch3: specifying archived log(s) in backup set input archived log thread=1 sequence=17 RECID=4 STAMP=1215039514 input archived log thread=1 sequence=18 RECID=5 STAMP=1215039514 channel ch3: starting piece 1 at 20-OCT-25 channel ch1: finished piece 1 at 20-OCT-25 piece handle=/data/backup/arch_ORCL_0f46o20q_15 tag=TAG20251020T225834 comment=NONE channel ch1: backup set complete, elapsed time: 00:00:01 channel ch2: finished piece 1 at 20-OCT-25 piece handle=/data/backup/arch_ORCL_0g46o20q_16 tag=TAG20251020T225834 comment=NONE channel ch2: backup set complete, elapsed time: 00:00:01 channel ch3: finished piece 1 at 20-OCT-25 piece handle=/data/backup/arch_ORCL_0h46o20q_17 tag=TAG20251020T225834 comment=NONE channel ch3: backup set complete, elapsed time: 00:00:01 Finished backup at 20-OCT-25 Starting backup at 20-OCT-25 channel ch1: starting full datafile backup set channel ch1: specifying datafile(s) in backup set including standby control file in backup set channel ch1: starting piece 1 at 20-OCT-25 channel ch1: finished piece 1 at 20-OCT-25 piece handle=/data/backup/Control_ORCL_0i46o20s_18 tag=TAG20251020T225836 comment=NONE channel ch1: backup set complete, elapsed time: 00:00:01 Finished backup at 20-OCT-25 Starting Control File and SPFILE Autobackup at 20-OCT-25 piece handle=/home/app/oracle/recovery_area/ORCL/autobackup/2025_10_20/o1_mf_s_1215039518_nhdwb6hd_.bkp comment=NONE Finished Control File and SPFILE Autobackup at 20-OCT-25 released channel: ch1 released channel: ch2 released channel: ch3
Step 5: Transfer the RMAN Backup to Standby Server.
[oracle@dba-simplified ~]$ cd /data/backup/ [oracle@dba-simplified backup]$ ls -ltr total 1768524 -rw-r----- 1 oracle oinstall 4734976 Oct 20 22:58 full_ORCL_0d46o20h_13 -rw-r----- 1 oracle oinstall 593428480 Oct 20 22:58 full_ORCL_0c46o20h_12 -rw-r----- 1 oracle oinstall 1084743680 Oct 20 22:58 full_ORCL_0b46o20h_11 -rw-r----- 1 oracle oinstall 7767552 Oct 20 22:58 arch_ORCL_0g46o20q_16 -rw-r----- 1 oracle oinstall 28672 Oct 20 22:58 arch_ORCL_0h46o20q_17 -rw-r----- 1 oracle oinstall 109576704 Oct 20 22:58 arch_ORCL_0f46o20q_15 -rw-r----- 1 oracle oinstall 10682368 Oct 20 22:58 Control_ORCL_0i46o20s_18 -rw-r--r-- 1 oracle oinstall 1793 Oct 20 22:12 initorcl_new.ora [oracle@dba-simplified backup]$ scp * oracle@192.168.0.160:/data/backup/ oracle@192.168.0.160's password: arch_ORCL_0f46o20q_15 100% 105MB 18.4MB/s 00:05 arch_ORCL_0g46o20q_16 100% 7586KB 17.8MB/s 00:00 arch_ORCL_0h46o20q_17 100% 28KB 4.8MB/s 00:00 Control_ORCL_0i46o20s_18 100% 10MB 32.0MB/s 00:00 initorcl_new.ora 100% 1793 761.6KB/s 00:00 full_ORCL_0b46o20h_11 100% 1034MB 21.1MB/s 00:49 full_ORCL_0c46o20h_12 100% 566MB 21.7MB/s 00:26 full_ORCL_0d46o20h_13 100% 4624KB 18.3MB/s 00:00
Step 6: Configure Network for Primary Database.
[oracle@dba-simplified admin]$ cat listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /home/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.150)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /home/app/oracle
[oracle@dba-simplified admin]$ cat tnsnames.ora
LISTENER =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.150)(PORT = 1521))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.150)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCLDR =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.160)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcldr)
)
)
Standby Side Configuration:
Step 1: Create Necessary Directories for Standby Database.
[oracle@dba-simplified ~]$ mkdir -p /home/app/oracle/admin/orcldr/adump [oracle@dba-simplified ~]$ mkdir -p /home/app/oracle/admin/orcldr/dpdump [oracle@dba-simplified ~]$ mkdir -p /home/app/oracle/oradata/ORCLDR/ [oracle@dba-simplified ~]$ mkdir -p /home/app/oracle/recovery_area/ORCLDR
Step 2: Configure Network for Standby Database.
[oracle@dba-simplified admin]$ cat listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldr)
(ORACLE_HOME = /home/app/oracle/product/19.3.0/db_1)
(SID_NAME = orcldr)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.160)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /home/app/oracle
[oracle@dba-simplified admin]$
[oracle@dba-simplified admin]$ cat tnsnames.ora
LISTENER =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.160)(PORT = 1521))
ORCLDR =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.160)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcldr)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.150)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
Step 3: Create Parameter File.
[oracle@dba-simplified dbs]$ cat initorcldr.ora orcldr.__data_transfer_cache_size=0 orcldr.__db_cache_size=419430400 orcldr.__inmemory_ext_roarea=0 orcldr.__inmemory_ext_rwarea=0 orcldr.__java_pool_size=100663296 orcldr.__large_pool_size=16777216 orcldr.__oracle_base='/home/app/oracle'#ORACLE_BASE set from environment orcldr.__pga_aggregate_target=553648128 orcldr.__sga_target=989855744 orcldr.__shared_io_pool_size=50331648 orcldr.__shared_pool_size=385875968 orcldr.__streams_pool_size=0 orcldr.__unified_pga_pool_size=0 *.audit_file_dest='/home/app/oracle/admin/orcldr/adump' *.audit_trail='db' *.compatible='19.0.0' *.control_files='/home/app/oracle/oradata/ORCLDR/control01.ctl','/home/app/oracle/recovery_area/ORCLDR/control02.ctl' *.db_block_size=8192 *.db_file_name_convert='/home/app/oracle/oradata/ORCL','/home/app/oracle/oradata/ORCLDR' *.db_name='orcl' *.db_recovery_file_dest='/home/app/oracle/recovery_area' *.db_recovery_file_dest_size=8256m *.db_unique_name='orcldr' *.diagnostic_dest='/home/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orcldrXDB)' *.fal_client='ORCLDR' *.fal_server='ORCL' *.local_listener='(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.160)(PORT=1521))' *.log_archive_config='DG_CONFIG=(orcl,orcldr)' *.log_archive_dest_1='LOCATION=/home/app/oracle/orcldr/archives VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcldr' *.log_archive_dest_2='SERVICE=orcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' *.log_archive_dest_state_1='ENABLE' *.log_archive_dest_state_2='ENABLE' *.log_archive_format='%t_%s_%r.arc' *.log_archive_max_processes=30 *.log_file_name_convert='/home/app/oracle/oradata/ORCL','/home/app/oracle/oradata/ORCLDR' *.memory_target=1471m *.nls_language='AMERICAN' *.nls_territory='AMERICA' *.open_cursors=300 *.processes=300 *.remote_login_passwordfile='EXCLUSIVE' *.standby_file_management='AUTO' *.undo_tablespace='UNDOTBS1' [oracle@dba-simplified dbs]$
Step 4: Create Password File.
from primary database [oracle@dba-simplified dbs]$ ls -ltr orapw* -rw-r----- 1 oracle oinstall 2048 Oct 20 23:27 orapworcl [oracle@dba-simplified dbs]$ [oracle@dba-simplified dbs]$ scp orapworcl oracle@192.168.0.160:/home/app/oracle/product/19.3.0/db_1/dbs oracle@192.168.0.160's password: orapworcl 100% 2048 617.7KB/s 00:00 [oracle@dba-simplified dbs]$ ls -ltr orapw* -rw-r----- 1 oracle oinstall 2048 Oct 21 00:12 orapworcl [oracle@dba-simplified dbs]$ mv orapworcl orapworcldr
Step 5: Restore and Recover the Database using Backup.
[oracle@dba-simplified ~]$ . oraenv ORACLE_SID = [orcldr] ? The Oracle base has been set to /home/app/oracle [oracle@dba-simplified ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Tue Oct 21 00:26:27 2025 Version 19.28.0.0.0 Copyright (c) 1982, 2025, Oracle. All rights reserved. Connected to an idle instance. SQL> startup nomount pfile='/home/app/oracle/product/19.3.0/db_1/dbs/initorcldr.ora'; ORACLE instance started. Total System Global Area 1543502248 bytes Fixed Size 8939944 bytes Variable Size 1056964608 bytes Database Buffers 469762048 bytes Redo Buffers 7835648 bytes SQL> SQL> create spfile from pfile; File created. SQL> shut immediate ORA-01507: database not mounted ORACLE instance shut down. SQL> startup nomount ORACLE instance started. Total System Global Area 1543502248 bytes Fixed Size 8939944 bytes Variable Size 1056964608 bytes Database Buffers 469762048 bytes Redo Buffers 7835648 bytes
[oracle@dba-simplified ~]$ rman target / Recovery Manager: Release 19.0.0.0.0 - Production on Tue Oct 21 00:31:38 2025 Version 19.28.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (not mounted) RMAN> restore standby controlfile from '/data/backup/Control_ORCL_0i46o20s_18'; restore standby controlfile from '/data/backup/Control_ORCL_0i46o20s_18'; Starting restore at 21-OCT-25 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=21 device type=DISK channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 output file name=/home/app/oracle/oradata/ORCLDR/control01.ctl output file name=/home/app/oracle/recovery_area/ORCLDR/control02.ctl Finished restore at 21-OCT-25 RMAN> alter database mount; alter database mount; released channel: ORA_DISK_1 Statement processed RMAN> catalog start with '/data/backup'; catalog start with '/data/backup'; Starting implicit crosscheck backup at 21-OCT-25 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=39 device type=DISK Crosschecked 17 objects Finished implicit crosscheck backup at 21-OCT-25 Starting implicit crosscheck copy at 21-OCT-25 using channel ORA_DISK_1 Finished implicit crosscheck copy at 21-OCT-25 searching for all files in the recovery area cataloging files... no files cataloged searching for all files that match the pattern /data/backup List of Files Unknown to the Database ===================================== File Name: /data/backup/Control_ORCL_0i46o20s_18 File Name: /data/backup/initorcl_new.ora Do you really want to catalog the above files (enter YES or NO)? yes cataloging files... cataloging done List of Cataloged Files ======================= File Name: /data/backup/Control_ORCL_0i46o20s_18 List of Files Which Were Not Cataloged ======================================= File Name: /data/backup/initorcl_new.ora RMAN-07517: Reason: The file header is corrupted RMAN> restore database; restore database; Starting restore at 21-OCT-25 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00004 to /home/app/oracle/oradata/ORCLDR/undotbs01.dbf channel ORA_DISK_1: restoring datafile 00007 to /home/app/oracle/oradata/ORCLDR/users01.dbf channel ORA_DISK_1: reading from backup piece /data/backup/full_ORCL_0d46o20h_13 channel ORA_DISK_1: piece handle=/data/backup/full_ORCL_0d46o20h_13 tag=TAG20251020T225825 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:03 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00003 to /home/app/oracle/oradata/ORCLDR/sysaux01.dbf channel ORA_DISK_1: restoring datafile 00005 to /home/app/oracle/oradata/ORCLDR/users02.dbf channel ORA_DISK_1: reading from backup piece /data/backup/full_ORCL_0c46o20h_12 channel ORA_DISK_1: piece handle=/data/backup/full_ORCL_0c46o20h_12 tag=TAG20251020T225825 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:07 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00001 to /home/app/oracle/oradata/ORCLDR/system01.dbf channel ORA_DISK_1: reading from backup piece /data/backup/full_ORCL_0b46o20h_11 channel ORA_DISK_1: piece handle=/data/backup/full_ORCL_0b46o20h_11 tag=TAG20251020T225825 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:07 Finished restore at 21-OCT-25 RMAN> recover database; recover database; Starting recover at 21-OCT-25 using channel ORA_DISK_1 starting media recovery channel ORA_DISK_1: starting archived log restore to default destination channel ORA_DISK_1: restoring archived log archived log thread=1 sequence=17 channel ORA_DISK_1: restoring archived log archived log thread=1 sequence=18 channel ORA_DISK_1: reading from backup piece /data/backup/arch_ORCL_0h46o20q_17 channel ORA_DISK_1: piece handle=/data/backup/arch_ORCL_0h46o20q_17 tag=TAG20251020T225834 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 archived log file name=/home/app/oracle/product/19.3.0/db_1/dbs/arch1_17_1206404260.arc thread=1 sequence=17 archived log file name=/home/app/oracle/product/19.3.0/db_1/dbs/arch1_18_1206404260.arc thread=1 sequence=18 media recovery complete, elapsed time: 00:00:01 Finished recover at 21-OCT-25
Step 6: Enable MRP (Managed Recovery Process).
SQL> select name, open_mode, database_role from v$database; NAME OPEN_MODE DATABASE_ROLE --------- -------------------- ---------------- ORCL MOUNTED PHYSICAL STANDBY SQL> alter database recover managed standby database disconnect from session; Database altered.
Step 7: Verify the Sync from Both the Servers.
From Primary Database:
SQL> select name, open_mode, database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
------ -------------- ----------------
ORCL READ WRITE PRIMARY
SQL> select max(sequence#) from v$archived_log where archived='YES';
MAX(SEQUENCE#)
--------------
27
From Standby Database:
SQL> select name, open_mode, database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
------ ------------- ----------------
ORCL MOUNTED PHYSICAL STANDBY
SQL> select max(sequence#) from v$archived_log where applied='YES';
MAX(SEQUENCE#)
--------------
27
Verify the archive log transfer to the standby after performing a manual log switch on the primary database.
SQL> alter system switch logfile; System altered. SQL> / System altered. SQL> / System altered. SQL> select max(sequence#) from v$archived_log where archived='YES'; MAX(SEQUENCE#) -------------- 30
From Standby Database:
SQL> select name, open_mode, database_role from v$database; NAME OPEN_MODE DATABASE_ROLE ------ ------------- ---------------- ORCL MOUNTED PHYSICAL STANDBY SQL> select max(sequence#) from v$archived_log where applied='YES'; MAX(SEQUENCE#) -------------- 30
Conclusion: Creating a Physical Standby Database in Oracle 19c using an RMAN backup provides a strong and efficient data protection strategy. Following this Data Guard setup ensures business continuity even in unexpected system failures.
With Oracle 19c Data Guard, you benefit from real-time synchronization, automatic failover, and simplified database recovery—helping your organization achieve high availability and resilience with minimal effort.
