Saturday, April 4, 2026

Create standby database using Duplicate command.

 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