Create standby database using Duplicate command.
some observation:
1)DGMGRL in listener configuration is not necessary if you are using oracle RAC, RESTART, kind of feature. This is single instance so that why i am using.
2)tnsnames.ora on primary side no need to create auxiliary db tnsnames entry.
Step 1:
First setup the Listener.ora and tns entry for primary DB.
[oracle@rac1 admin]$ cat listener.ora
Listener configuration on Primary DB.
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MFTP_DGMGRL_example.com)
(ORACLE_HOME = /oracle/DEA/121)
(SID_NAME = MFT)
)
(SID_DESC =
(GLOBAL_DBNAME = MFTP_example.com)
(ORACLE_HOME = /oracle/DEA/121)
(SID_NAME = MFT)
)
)
LISTENER1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1.example.com)(PORT = 1524))
)
ADR_BASE_LISTENERMFT = /oracle/DEA
--TNSNAMES.ora file configuration.
## Primary DB tnsnames.ora
MFTP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.99)(PORT = 1524))
)
(CONNECT_DATA =
(SID = MFT)
)
)
##For Aux instance
MFTSAUX =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.100) (PORT = 1524))
)
(CONNECT_DATA =
(SID = MFTS)
(UR = A)
)
)
##For standby DB. MFTS
MFTS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.100) (PORT = 1524))
)
(CONNECT_DATA =
(SID = MFTS)
)
)
Step 2:
Second setup the Listener.ora and tns entry for STANDBY DB.
[oracle@rac2 admin]$ cat listener.ora
LISTENER1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2.example.com)(PORT = 1524))
)
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = MFTS_DGMGRL_example.com)
(ORACLE_HOME = /oracle/DEA/121)
(SID_NAME = MFTS)
)
(SID_DESC =
(GLOBAL_DBNAME = MFTS_example.com)
(ORACLE_HOME = /oracle/DEA/121)
(SID_NAME = MFTS)
)
)
ADR_BASE_LISTENERPROD = /oracle/DEA
[oracle@rac2 admin]$ cat tnsnames.ora
##For Aux instance
MFTSAUX =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.100)(PORT = 1524))
)
(CONNECT_DATA =
(SID = MFTS)
(UR = A)
)
)
## Primary DB tnsnames.ora
MFTP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.99)(PORT = 1524))
)
(CONNECT_DATA =
(SID = MFT)
)
)
## STANDBY DB tnsnames.ora
MFTS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.100)(PORT = 1524))
)
(CONNECT_DATA =
(SID = MFTS)
(UR = A)
)
)
Step 3: login to Source DB and update Primary DB parameter.
[oracle@rac1 PRIMARY]$ env | grep ORA
ORACLE_SID=MFT
ORACLE_BASE=/oracle/DEA
ORACLE_HOME=/oracle/DEA/121
[oracle@rac2 dbs]$ cat initMFTP.ora
alter system set db_unique_name=MFTP scope=spfile;
alter system set log_archive_dest_1='location=/u002/MFTP/archive VALID_FOR=(ONLINE_LOGFILE,ALL_ROLES) DB_UNIQUE_NAME=MFTP' scope=spfile;
alter system set log_archive_dest_2='service=MFTS ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=MFTS' scope=BOTH;
alter system set log_archive_config='dg_config=(MFTP,MFTS)' scope=spfile;
alter system set standby_file_management=AUTO scope=BOTH;
--alter system set local_listener='(ADDRESS = (PROTOCOL=TCP)(HOST=192.168.56.99)(PORT=1521))
alter system set fal_server=MFTS scope=BOTH;
show parameter log_archive_dest_2
show parameter log_archive_dest_1
show parameter standby_file_management
show parameter fal_server
show parameter DB_UNIQUE_NAME
show parameter DB_NAME
set linesize 500 pages 100
col name for a30
col value forma a100
select name, value
from v$parameter
where name in ('db_name','db_unique_name','log_archive_config',
'log_archive_dest_1','log_archive_dest_2',
'log_archive_dest_state_1','log_archive_dest_state_2',
'remote_login_passwordfile', 'log_archive_format', 'log_archive_max_processes',
'fal_server','db_file_name_convert', 'log_file_name_convert', 'standby_file_management');
##Add standby redo log files.
alter database add standby logfile group 10 '/oracle/DEA/sapdata2/MFT/srl_redo10.log' size 52428800;
alter database add standby logfile group 11 '/oracle/DEA/sapdata2/MFT/srl_redo11.log' size 52428800;
alter database add standby logfile group 12 '/oracle/DEA/sapdata2/MFT/srl_redo12.log' size 52428800;
##Create a new directory structure.
mkdir -p /u002/MFTP/archive
## To check standby redo and online redologs.
[oracle@rac1 PRIMARY]$ cat view_redo_log.sh
#!/bin/bash
sqlplus -s / as sysdba <<EOF
set lines 120
col type for a20
col MEMBER for a70
select lf.group#,l_type.log_type as type, lf.member
from v\$logfile lf
join (
select group#,'ORL' as log_type from v\$log
union
select group#,'SRL' as log_type from v\$standby_log) l_type
on lf.group#=l_type.group#
order by lf.group#;
select group#,thread#,bytes from v\$standby_log;
select group#,thread#,bytes from v\$log;
EOF
##Creaete password file.
[oracle@rac1 PRIMARY]$ cat orapw.sh
ORACLE_HOME=/oracle/DEA/121
orapwd file=$ORACLE_HOME/dbs/orapw${ORACLE_SID} password=Basis#123
### Create pfile
[oracle@rac1 PRIMARY]$ sqlplus / as sysdba
create pfile from spfile;
##Check and start listener.
[oracle@rac1 ~]$ lsnrctl status LISTENER1
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 04-APR-2026 14:53:19
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1.example.com)(PORT=1524)))
STATUS of the LISTENER
------------------------
Alias LISTENER1
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date 30-MAR-2026 10:35:02
Uptime 5 days 4 hr. 18 min. 16 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/DEA/12102/network/admin/listener.ora
Listener Log File /oracle/DEA/diag/tnslsnr/rac1/listener1/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.example.com)(PORT=1524)))
Services Summary...
Service "MFTP_DGMGRL_example.com" has 1 instance(s).
Instance "MFT", status UNKNOWN, has 1 handler(s) for this service...
Service "MFTP_example.com" has 1 instance(s).
Instance "MFT", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@rac1 ~]$
UNKNOWN means its static registration. STANDBY and PROD DB both required the static registration.
----Login to standby DB.
1)Check environment and start in nomount state.
[oracle@rac2 ~]$ cat .env
export ORACLE_SID=MFTS
export ORACLE_HOME=/oracle/DEA/121
export ORACLE_BASE=/oracle/DEA
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
[oracle@rac2 ~]$ ps -ef|grep pmon
oracle 11689 1 0 13:49 ? 00:00:00 ora_pmon_MFTS
oracle 12685 12601 0 14:46 pts/1 00:00:00 grep --color=auto pmon
[oracle@rac2 dbs]$ cat initMFTS.ora
*.fal_server='MFTP'
#*.local_listener='MFTS'
*.log_archive_config='dg_config=(MFTP,MFTS)'
*.log_archive_dest_1='location=/u002/MFTS/archive VALID_FOR=(ONLINE_LOGFILE,ALL_ROLES) DB_UNIQUE_NAME=MFTS'
*.log_archive_dest_2='service=MFTP ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=MFTP'
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.db_file_name_convert='/oracle/DEA/sapdata2/MFT','/oracle/DEA/sapdata2/MFTS'
*.log_file_name_convert='/oracle/DEA/sapdata2/MFT','/oracle/DEA/sapdata2/MFTS'
*.db_name='MFT'
*.db_unique_name='MFTS'
2)create password file.
[oracle@rac2 ~]$ cat ora_pass.sh
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=Basis123 entries=10 force=y
3)Check listener on STANDBY DB SITE.
[oracle@rac2 ~]$ lsnrctl status LISTENER1
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 04-APR-2026 14:50:52
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac2.example.com)(PORT=1524)))
STATUS of the LISTENER
------------------------
Alias LISTENER1
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date 30-MAR-2026 12:03:23
Uptime 5 days 2 hr. 47 min. 29 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/DEA/12102/network/admin/listener.ora
Listener Log File /oracle/DEA/diag/tnslsnr/rac2/listener1/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac2.example.com)(PORT=1524)))
Services Summary...
Service "MFTS_DGMGRL_example.com" has 1 instance(s). ====> service created and added in listener.ora files.
Instance "MFTS", status UNKNOWN, has 1 handler(s) for this service...
Service "MFTS_example.com" has 1 instance(s). ===> Services created and added in listener.ora fles.
Instance "MFTS", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@rac2 ~]$
UNKNOWN means is static service registration and it will use for duplicate command.
4) #### Use duplicate command to perform restoration.
please make sure that directory strucuter must created.
[oracle@rac2 ~]$ cat rman_active.sh
#!/bin/bash
rman target sys/Basis123@PMFTP auxiliary sys/Basis123@MFTSAUX
<<EOF
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;
EOF
[oracle@rac2 ~]$ ./MFT_rman_active.sh
Recovery Manager: Release 12.1.0.2.0 - Production on Mon Mar 30 11:51:56 2026
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
connected to target database: MFT (DBID=2000835576)
connected to auxiliary database: MFT (not mounted)
RMAN> 2> 3> 4> 5>
executing command: SET NEWNAME
Starting Duplicate Db at 30-MAR-26
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=12 device type=DISK
contents of Memory Script:
{
backup as copy reuse
targetfile '/oracle/DEA/121/dbs/orapwMFT' auxiliary format
'/oracle/DEA/121/dbs/orapwMFTS' ;
}
executing Memory Script
Starting backup at 30-MAR-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=61 device type=DISK
Finished backup at 30-MAR-26
contents of Memory Script:
{
restore clone from service 'MFTP' standby controlfile;
}
executing Memory Script
Starting restore at 30-MAR-26
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service MFTP
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oracle/DEA/sapdata2/MFTS/control01.ctl
output file name=/oracle/DEA/fast_recovery_area/MFTS/control02.ctl
Finished restore at 30-MAR-26
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
set newname for tempfile 1 to
"/oracle/DEA/SAPDATA2/MFTS/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/oracle/DEA/sapdata2/MFTS/system01.dbf";
set newname for datafile 3 to
"/oracle/DEA/sapdata2/MFTS/sysaux01.dbf";
set newname for datafile 4 to
"/oracle/DEA/sapdata2/MFTS/undotbs01.dbf";
set newname for datafile 5 to
"/oracle/DEA/sapdata2/MFTS/ogg_tbs1.dbf";
set newname for datafile 6 to
"/oracle/DEA/sapdata2/MFTS/users01.dbf";
restore
from service 'MFTP' clone database
;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /oracle/DEA/SAPDATA2/MFTS/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 30-MAR-26
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service MFTP
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /oracle/DEA/sapdata2/MFTS/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service MFTP
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to /oracle/DEA/sapdata2/MFTS/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:25
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service MFTP
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00004 to /oracle/DEA/sapdata2/MFTS/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service MFTP
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00005 to /oracle/DEA/sapdata2/MFTS/ogg_tbs1.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service MFTP
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00006 to /oracle/DEA/sapdata2/MFTS/users01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
Finished restore at 30-MAR-26
sql statement: alter system archive log current
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=1229255573 file name=/oracle/DEA/sapdata2/MFTS/system01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=1229255573 file name=/oracle/DEA/sapdata2/MFTS/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=1229255573 file name=/oracle/DEA/sapdata2/MFTS/undotbs01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=4 STAMP=1229255573 file name=/oracle/DEA/sapdata2/MFTS/ogg_tbs1.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=5 STAMP=1229255573 file name=/oracle/DEA/sapdata2/MFTS/users01.dbf
Finished Duplicate Db at 30-MAR-26
select process from v$managed_standby;
PROCESS
---------
ARCH
ARCH
ARCH
ARCH
MRP0
RFS
RFS
RFS
SQL> select name,database_role from v$database;
NAME DATABASE_ROLE
--------- ----------------
MFT PHYSICAL STANDBY
SQL>select process from v$managed_standby;
PROCESS
---------
ARCH
ARCH
ARCH
ARCH
MRP0
RFS
RFS
RFS