Oracle 19c Data Guard: Step-by-Step Physical Standby Database Creation

In this detailed guide, you will learn the complete, step-by-step process for manually creating a Physical Standby Database using RMAN backup in Oracle 19c.
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.

From 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.

Post a Comment

© Ayaan Israr - All rights reserved. Premium By Ayaan Israr