Friday, September 25, 2026
  • About Us
  • Contact
DBAInsight
  • Guides
    • 23ai
    • RMAN
    • 26ai
    • Patch Update
    • RMAN
    • MySQL
    • Oracle GoldenGate
  • Cloud Technology
  • Case Studies
  • Troubleshooting
  • Training & Certification
NEWSLETTER
No Result
View All Result
DBAInsight
Home Guides

Oracle Data Guard Physical Standby: Configure RAC Primary to RAC Standby with a Dedicated Log-Shipping Network

November 5, 2025
in Guides
2
Oracle Data Guard Physical Standby: Configure RAC Primary to RAC Standby with a Dedicated Log-Shipping Network
0
SHARES
307
VIEWS

When running mission-critical applications, downtime is never an option. That’s why many organizations rely on Oracle Data Guard Physical Standby to protect their data and ensure business continuity. In this guide, we’ll walk through how to configure RAC Primary to RAC Standby with a Dedicated Log-Shipping Network, a best-practice approach that improves performance, reduces latency, and strengthens resilience. By isolating log transport onto its own network, you minimize the risk of congestion on public or interconnect traffic—giving your database a more reliable safety net during switchover and failover operations.

Oracle RAC Primary to RAC Standby setup using Dedicated Log-Shipping Network for Data Guard configuration

Table of Contents

Toggle
  • Why a second network for redo?
  • 1. Cluster Configuration Information
    • RAC Primary Nodes (db112a)
    • RAC Standby Nodes (db112a_stb)
  • 2. Register the DG network in Clusterware (grid home)
    • Related posts
    • Oracle Database Monitoring Tools: 10 Best Tools for DBAs in 2026
    • Oracle Database Release Roadmap 2026: Current Support Status, 19c, 21c and 26ai
  • 3. Create DG VIPs on the DG network (per cluster)
  • 4. Create LISTENER_DG on the DG network (grid home)
  • 5. TNS aliases for shipping & Broker
  • 6. Configuring Static Listener Endpoints in listener.ora for Automatic RDBMS Restart After Switchover
  • 6) LISTENER_NETWORKS for instance registrations (per instance)
  • 8) Enable Data Guard Broker on both sites
  • 9) Create Broker configuration (from primary)
  • 10) Validate redo transport via DG listener
  • Switchover/Failover notes
  • Troubleshooting quick hits
    • Disclaimer

Why a second network for redo?

  • Isolation & performance: keep redo/protection traffic off the public client network.
  • Availability: DG VIPs ensure endpoint survivability during node failovers.
  • Operational clarity: LISTENER_NETWORKS cleanly separates registrations for public vs. redo/Broker traffic.

1. Cluster Configuration Information

RAC Primary Nodes (db112a)

CategoryDetails
Public IPs / eth0Node 1:
<eth0_ip_prodvm1> → prodvm1.<domain>

<eth0_ip_prodvm1-vip> → prodvm1-vip.<domain>

Node 2:
<eth0_ip_prodvm2> → prodvm2.<domain>

<eth0_ip_prodvm2-vip> → prodvm2-vip.<domain>
SCAN<ip_scan_prodvmscan1> → prodvmscan1.<domain>
Data Guard IPs / eth2Node 1:
<eth2_ip_prodvm1-dg> → prodvm1-dg.<domain>

<eth2_ip_prodvm1-dg-vip> → prodvm1-dg-vip.<domain>

Node 2:
<eth2_ip_prodvm2-dg> → prodvm2-dg.<domain>

<eth2_ip_prodvm2-dg-vip> → prodvm2-dg-vip.<domain>
Databasedb_name: db112a
db_unique_name: db112a
Instances: db112a1, db112a2

RAC Standby Nodes (db112a_stb)

CategoryDetails
Public IPs / eth0Node 1:
<eth0_ip_stbyvm1> → stbyvm1.<domain>

<eth0_ip_stbyvm1-vip> → stbyvm1-vip.<domain>

Node 2:
<eth0_ip_stbyvm2> → stbyvm2.<domain>

<eth0_ip_stbyvm2-vip> → stbyvm2-vip.<domain>
SCAN<ip_scan_stbyvmscan1> → stbyvmscan1.<domain>
Data Guard IPs / eth2Node 1:
<eth2_ip_stbyvm1-dg> → stbyvm1-dg

<eth2_ip_stbyvm1-dg-vip> → stbyvm1-dg-vip.<domain>

Node 2:•
<eth2_ip_stbyvm2-dg> → stbyvm2-dg

<eth2_ip_stbyvm2-dg-vip> → stbyvm2-dg-vip.<domain>
Databasedb_name: db112a
db_unique_name: db112a_stb
Instances: db112a1, db112a2

2. Register the DG network in Clusterware (grid home)

Next, add the new network configuration to the Oracle GRID environment. This network will run on eth2 using the subnet <192.nnn.nnn.0>. In this setup, the same network is shared between the Primary and Standby sites since no router is present—the connection is handled directly through a network switch. This design simplifies connectivity and ensures lower latency for Data Guard log shipping.

Related posts

Oracle Database Monitoring Tools

Oracle Database Monitoring Tools: 10 Best Tools for DBAs in 2026

September 22, 2026
Oracle Database Release Roadmap 2026: Current Support Status, 19c, 21c and 26ai

Oracle Database Release Roadmap 2026: Current Support Status, 19c, 21c and 26ai

September 21, 2026

At the Primary site, log in to one of the cluster nodes and use the srvctl command to create the new network resource. Defining this resource ensures that Oracle Clusterware recognizes the dedicated log-shipping network, keeping it highly available and properly managed during switchover or failover operations.

On each site (run once per cluster):

Production

# Add network resource (example key -k 2, device eth2, subnet/mask placeholders)
srvctl add network -netnum 2 -subnet <192.x.y.0>/<mask nnn.nnn.nnn.0>/eth2 -nettype static -verbose
crsctl stat res -t   # confirm ora.net2.network exists

Output

[root@prodvm1 ~]# srvctl add network -netnum 2 -subnet 192.168.56.0/255.255.255.0/eth2 -nettype static -verbose
Successfully added Network.

[root@grid1vm1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
..
.                           
ora.net1.network
               ONLINE  ONLINE       prodvm1                                     
               ONLINE  ONLINE       prodvm2                                     
ora.net2.network
               OFFLINE OFFLINE      prodvm1                                     
               OFFLINE OFFLINE      prodvm2   

Standby

[root@stbyvm1 ~]# srvctl add network -k 2 -S <192.nnn.nn.0>/<mask nnn.nnn.nnn.0>/eth2 -w static -v

[root@stbyvm1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
..
.                                    
ora.net1.network
               ONLINE  ONLINE       stbyvm1                                     
               ONLINE  ONLINE       stbyvm2                                     
ora.net2.network
               OFFLINE  OFFLINE    stbyvm1                                     
               OFFLINE  OFFLINE    stbyvm2                                     

Start it:

crsctl start res ora.net2.network
crsctl stat res -t   # ora.net2.network ONLINE on all nodes

Production Output

[root@prodvm1 ~]# crsctl start res ora.net2.network
CRS-2672: Attempting to start 'ora.net2.network' on 'prodvm1'
CRS-2672: Attempting to start 'ora.net2.network' on 'prodvm2'
CRS-2676: Start of 'ora.net2.network' on 'prodvm2' succeeded
CRS-2676: Start of 'ora.net2.network' on 'prodvm1' succeeded

[root@prodvm1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
..
.                                
ora.net1.network
               ONLINE  ONLINE       prodvm1                                     
               ONLINE  ONLINE       prodvm2                                     
ora.net2.network
               ONLINE  ONLINE       prodvm1                                     
               ONLINE  ONLINE       prodvm2                                     
..
.

ora.db112a.db
      1        ONLINE  ONLINE       prodvm1                 Open                
      2        ONLINE  ONLINE       prodvm2                 Open

Standby Site Output

[root@stbyvm1 ~]# crsctl start res ora.net2.network

CRS-2672: Attempting to start 'ora.net2.network' on 'stbyvm1'
CRS-2672: Attempting to start 'ora.net2.network' on 'stbyvm2'
CRS-2676: Start of 'ora.net2.network' on 'stbyvm2' succeeded
CRS-2676: Start of 'ora.net2.network' on 'stbyvm1' succeeded

[root@stbyvm1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
..
.                                    
ora.net1.network
               ONLINE  ONLINE       stbyvm1                                     
               ONLINE  ONLINE       stbyvm2                                     
ora.net2.network
               ONLINE  ONLINE       stbyvm1                                     
               ONLINE  ONLINE       stbyvm2                                     
..
.                                    
ora.db112a_stb.db
      1        ONLINE  INTERMEDIATE stbyvm1                 Mounted (Closed)    
      2        ONLINE  INTERMEDIATE stbyvm2                 Mounted (Closed)

If you receive this error

crsctl start res ora.net2.network
CRS-4995:  The command ‘Start  resource’ is invalid in crsctl. Use srvctl for this command.

Please add VIP resource for the 2nd network, then start the VIP resource via srvctl start vip command as root user.The network resource will be started as a dependency from the VIP resource.


3. Create DG VIPs on the DG network (per cluster)

Add VIPs tied to -k 2 (the DG network):

# At the Primary site from one of the cluster nodes
srvctl add vip -n prodvm1 -A <eth2_ip_prodvm1-dg-vip>/<mask> -k 2
srvctl add vip -n prodvm2 -A <eth2_ip_prodvm2-dg-vip>/<mask> -k 2


# Standby site from one of the cluster nodes
srvctl add vip -n stbyvm1 -A <eth2_ip_stbyvm1-dg-vip>/<mask> -k 2
srvctl add vip -n stbyvm2 -A <eth2_ip_stbyvm2-dg-vip>/<mask> -k 2
srvctl start vip -i stbyvm1-dg-vip
srvctl start vip -i stbyvm2-dg-vip

Start prodction site VIP

srvctl start vip -i prodvm1-dg-vip
srvctl start vip -i prodvm2-dg-vip

Production status

[root@prodvm1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
..
.                                    
ora.net1.network
               ONLINE  ONLINE       prodvm1                                     
               ONLINE  ONLINE       prodvm2                                     
ora.net2.network
               ONLINE  ONLINE       prodvm1                                     
               ONLINE  ONLINE       prodvm2                                     
                                    
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
..
.                                   
ora.db112a.db
      1        ONLINE  ONLINE       prodvm1                 Open                
      2        ONLINE  ONLINE       prodvm2                 Open                
ora.prodvm1-dg-vip.vip
      1        ONLINE  ONLINE       prodvm1                                     
ora.prodvm1.vip
      1        ONLINE  ONLINE       prodvm1                                     
ora.prodvm2-dg-vip.vip
      1        ONLINE  ONLINE       prodvm2                                     
ora.prodvm2.vip

Start standby site VIP from one of the cluster nodes

[root@stbyvm1 ~]# srvctl start vip -i stbyvm2-dg-vip

[root@stbyvm1 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
..
.
ora.net1.network
               ONLINE  ONLINE       stbyvm1                                     
               ONLINE  ONLINE       stbyvm2                                     
ora.net2.network
               ONLINE  ONLINE       stbyvm1                                     
               ONLINE  ONLINE       stbyvm2                                     
..
.                                   
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
..
.                                    
ora.db112a_stb.db
      1        ONLINE  INTERMEDIATE stbyvm1                 Mounted (Closed)    
      2        ONLINE  INTERMEDIATE stbyvm2                 Mounted (Closed)    
ora.stbyvm1-dg-vip.vip
      1        ONLINE  ONLINE       stbyvm1                                     
ora.stbyvm1.vip
      1        ONLINE  ONLINE       stbyvm1                                     
ora.stbyvm2-dg-vip.vip
      1        ONLINE  ONLINE       stbyvm2                                     
ora.stbyvm2.vip
      1        ONLINE  ONLINE       stbyvm2  

Verify with crsctl stat res -t—you should see ora.<host>-dg-vip.vip ONLINE.


4. Create LISTENER_DG on the DG network (grid home)

On the Primary site, start from the first node and create a dedicated Data Guard listener in the GRID home using NETCA. Configure the listener to run on the new network interface with the TCP protocol and assign it to port 1555. For clarity and consistency, name the new listener LISTENER_DG.

netca  # Oracle Net Configuration Assistant → create LISTENER_DG on network2 (eth2)
Oracle NETCA configuration for creating a Data Guard-specific listener (LISTENER_DG) on TCP port 1555 in the GRID home
crsctl stat res -t    # ora.LISTENER_DG.lsnr ONLINE on all nodes

[oracle@prodvm1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
..
.                                    
ora.LISTENER.lsnr
               ONLINE  ONLINE       prodvm1                                     
               ONLINE  ONLINE       prodvm2                                     
ora.LISTENER_DG.lsnr
               ONLINE  ONLINE       prodvm1                                     
               ONLINE  ONLINE       prodvm2                                     
..
.                                     
ora.net1.network
               ONLINE  ONLINE       prodvm1                                     
               ONLINE  ONLINE       prodvm2                                     
ora.net2.network
               ONLINE  ONLINE       prodvm1                                     
               ONLINE  ONLINE       prodvm2                                     
..
.                                   
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       prodvm1                                     
ora.db112a.db
      1        ONLINE  ONLINE       prodvm1                 Open                
      2        ONLINE  ONLINE       prodvm2                 Open                
ora.prodvm1-dg-vip.vip
      1        ONLINE  ONLINE       prodvm1                                     
ora.prodvm1.vip
      1        ONLINE  ONLINE       prodvm1                                     
ora.prodvm2-dg-vip.vip
      1        ONLINE  ONLINE       prodvm2                                     
ora.prodvm2.vip
      1        ONLINE  ONLINE       prodvm2                                     
ora.oc4j
      1        OFFLINE OFFLINE                                                   
ora.scan1.vip
      1        ONLINE  ONLINE       prodvm1

On the Standby site, begin from the first node and configure a dedicated Data Guard listener in the GRID home using NETCA. Set the listener to use the TCP protocol on port 1555, and name it LISTENER_DG to match the Primary configuration.

[oracle@stbyvm1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
..
.                                    
ora.LISTENER.lsnr
               ONLINE  ONLINE       stbyvm1                                     
               ONLINE  ONLINE       stbyvm2                                     
ora.LISTENER_DG.lsnr
               ONLINE  ONLINE       stbyvm1                                     
               ONLINE  ONLINE       stbyvm2                                     
..
.                                     
ora.net1.network
               ONLINE  ONLINE       stbyvm1                                     
               ONLINE  ONLINE       stbyvm2                                     
ora.net2.network
               ONLINE  ONLINE       stbyvm1                                     
               ONLINE  ONLINE       stbyvm2                                     
..
.                                   
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       stbyvm1                                     
ora.db112a_stb.db
      1        ONLINE  ONLINE       stbyvm1                 Open                
      2        ONLINE  ONLINE       stbyvm2                 Open                
ora.stbyvm1-dg-vip.vip
      1        ONLINE  ONLINE       stbyvm1                                     
ora.stbyvm1.vip
      1        ONLINE  ONLINE       stbyvm1                                     
ora.stbyvm2-dg-vip.vip
      1        ONLINE  ONLINE       stbyvm2                                     
ora.stbyvm2.vip
      1        ONLINE  ONLINE       stbyvm2                                     
..
.                                                  
ora.scan1.vip
      1        ONLINE  ONLINE       stbyvm1

SCAN listeners remain for public client traffic (port 1521). LISTENER_DG is in addition and bound to the DG network.

For reliable log transport, ensure that log shipping between the Primary and Standby sites uses the default database service. This guarantees that the service remains available throughout the entire switchover process. The default database service should be registered in the listeners using the db_unique_name value for both the Primary and Standby databases.

The Primary Site listener used in log shipping will show 

[grid@prodvm1 ~]$ lsnrctl services listener_dg

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 19-SEP-2014 11:01:07

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_DG)))
Services Summary...
Service "db112a.<domain>" has 2 instance(s).
  Instance "db112a1", status READY, has 2 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:6 refused:0 state:ready
         LOCAL SERVER
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<eth2_ip_prodvm1-dg-vip>)(PORT=1555)))
  Instance "db112a2", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:1 refused:0 state:ready
         REMOTE SERVER
         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<eth2_ip_prodvm2-dg-vip>)(PORT=1555)))

The Standy Site listener used in log shipping will show 

[grid@stbyvm1 ~]$ lsnrctl services listener_dg

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 20-SEP-2014 05:29:40

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_DG)))
Services Summary...


Service "db112a_stb.<domain>" has 2 instance(s).
  Instance "db112a1", status READY, has 2 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:5 refused:0 state:ready
         LOCAL SERVER
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<eth2_ip_stbyvm1-dg-vip>)(PORT=1555)))
  Instance "db112a2", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:2 refused:0 state:ready
         REMOTE SERVER
         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<eth2_ip_stbyvm2-dg-vip>)(PORT=1555)))

5. TNS aliases for shipping & Broker

Create the required TNS alias entries for log shipping and listener registration for each instance in both the Primary and Standby clusters. These entries must be added to the tnsnames.ora file located in the RDBMS home from which the database instances run. Once updated, ensure that this tnsnames.ora file is replicated across all cluster nodes in both the Primary and Standby sites to maintain consistency.

Place in RDBMS home’s tnsnames.ora on all nodes (both sites). Adjust names/ports:

# Public via SCAN
DB112A_PRM =
  (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=prodvmscan1.<domain>)(PORT=1521))
   (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=db112a.<domain>)))

DB112A_STB =
  (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=stbyvmscan1.<domain>)(PORT=1521))
   (CONNECT_DATA=(SERVICE_NAME=db112a_stb.<domain>)))

# DG/Broker on private network (eth2, port 1555) with DG VIPs
DB112A_PRM_DGMGRL =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=TCP)(HOST=prodvm1-dg-vip.<domain>)(PORT=1555))
    (ADDRESS=(PROTOCOL=TCP)(HOST=prodvm2-dg-vip.<domain>)(PORT=1555))
    (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=db112a_dgmgrl.<domain>)))

DB112A_STB_DGMGRL =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=TCP)(HOST=stbyvm1-dg-vip.<domain>)(PORT=1555))
    (ADDRESS=(PROTOCOL=TCP)(HOST=stbyvm2-dg-vip.<domain>)(PORT=1555))
    (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=db112a_stb_dgmgrl.<domain>)))

# Redo shipping endpoints (default service names for transport)
DB112A_PRM_SHIP =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=TCP)(HOST=prodvm1-dg-vip.<domain>)(PORT=1555))
    (ADDRESS=(PROTOCOL=TCP)(HOST=prodvm2-dg-vip.<domain>)(PORT=1555))
    (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=db112a.<domain>)))

DB112A_STB_SHIP =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=TCP)(HOST=stbyvm1-dg-vip.<domain>)(PORT=1555))
    (ADDRESS=(PROTOCOL=TCP)(HOST=stbyvm2-dg-vip.<domain>)(PORT=1555))
    (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=db112a_stb.<domain>)))
# LISTENER_NETWORKS Aliases used to implement service registrations with both local and remote listeners across the cluster nodes and data guard environment.

prodVM1_LOCAL_NET1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <eth0_ip_prodvm1> )(PORT = 1521)))

prodVM1_LOCAL_NET2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <eth2_ip_prodvm1-dg-vip> )(PORT = 1555)))

prodVM2_LOCAL_NET1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <eth0_ip_prodvm2> )(PORT = 1521)))

prodVM2_LOCAL_NET2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <eth2_ip_prodvm2-dg-vip> )(PORT = 1555)))

prod_REMOTE_NET2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <eth2_ip_prodvm1-dg-vip> )(PORT = 1555)))
    (DESCRIPTION =  (ADDRESS = (PROTOCOL = TCP)(HOST = <eth2_ip_prodvm2-dg-vip> )(PORT = 1555))))

stbyVM1_LOCAL_NET1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <eth0_ip_stbyvm1>)(PORT = 1521)))

stbyVM1_LOCAL_NET2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =<eth2_ip_stbyvm1-dg-vip> )(PORT = 1555)))

stbyVM2_LOCAL_NET1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <eth0_ip_stbyvm2> )(PORT = 1521)))
 
stbyVM2_LOCAL_NET2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <eth2_ip_stbyvm2-dg-vip>)(PORT = 1555)))

stby_REMOTE_NET2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <eth2_ip_stbyvm1-dg-vip>)(PORT = 1555)))
    (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <eth2_ip_stbyvm2-dg-vip> )(PORT = 1555))))

6. Configuring Static Listener Endpoints in listener.ora for Automatic RDBMS Restart After Switchover

To ensure that RDBMS instances restart automatically after a switchover, you must configure static connection endpoints and services for the new listener (LISTENER_DG). Add the required static entry to the listener.ora file in the GRID home on every node of the cluster, both at the Primary and Standby sites. This guarantees consistent behavior across the environment during switchover operations.

For Primary site node 1 and instance 1

SID_LIST_LISTENER_DG =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = db112a_dgmgrl.<domain>)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_2)
      (SID_NAME = db112a1)
    )
  )

For Primary site node 2 and instance 2

SID_LIST_LISTENER_DG =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = db112a_dgmgrl.<domain>)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_2)
      (SID_NAME = db112a2)
    )
  )

For Standby site node 1 and instance 1

SID_LIST_LISTENER_DG =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = db112a_stb_dgmgrl.<domain>)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_2)
      (SID_NAME = db112a1)
    )
  )

For Standby site node 2 and instance 2

SID_LIST_LISTENER_DG =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = db112a_stb_dgmgrl.<domain>)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_2)
      (SID_NAME = db112a2)
    )
  )

6) LISTENER_NETWORKS for instance registrations (per instance)

Create local/remote aliases in tnsnames.ora (as shown in your source), then set LISTENER_NETWORKS so each instance registers to:

  • network1 → public listener/SCAN (1521)
  • network2 → LISTENER_DG (1555) for DG/Broker

Run on each instance SID:

Production

-- Primary
ALTER SYSTEM SET listener_networks=
'((NAME=network1)(LOCAL_LISTENER=prodVM1_LOCAL_NET1)(REMOTE_LISTENER=prodvmscan1:1521))',
'((NAME=network2)(LOCAL_LISTENER=prodVM1_LOCAL_NET2)(REMOTE_LISTENER=prod_REMOTE_NET2))'
SCOPE=BOTH SID='db112a1';

ALTER SYSTEM SET listener_networks=
'((NAME=network1)(LOCAL_LISTENER=prodVM2_LOCAL_NET1)(REMOTE_LISTENER=prodvmscan1:1521))',
'((NAME=network2)(LOCAL_LISTENER=prodVM2_LOCAL_NET2)(REMOTE_LISTENER=prod_REMOTE_NET2))'
SCOPE=BOTH SID='db112a2';

Stnadby

-- Standby (adjust aliases accordingly)
ALTER SYSTEM SET listener_networks=
'((NAME=network1)(LOCAL_LISTENER=stbyVM1_LOCAL_NET1)(REMOTE_LISTENER=stbyvmscan1:1521))',
'((NAME=network2)(LOCAL_LISTENER=stbyVM1_LOCAL_NET2)(REMOTE_LISTENER=stby_REMOTE_NET2))'
SCOPE=BOTH SID='db112a1';

ALTER SYSTEM SET listener_networks=
'((NAME=network1)(LOCAL_LISTENER=stbyVM2_LOCAL_NET1)(REMOTE_LISTENER=stbyvmscan1:1521))',
'((NAME=network2)(LOCAL_LISTENER=stbyVM2_LOCAL_NET2)(REMOTE_LISTENER=stby_REMOTE_NET2))'
SCOPE=BOTH SID='db112a2';


8) Enable Data Guard Broker on both sites

Set broker files to cluster-aware storage (ASM is ideal):

Primary:

ALTER SYSTEM SET dg_broker_config_file1='+DATA/db112a/dg_broker1.dat' SCOPE=SPFILE SID='*';
ALTER SYSTEM SET dg_broker_config_file2='+FRA/db112a/dg_broker2.dat'  SCOPE=SPFILE SID='*';
ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=SPFILE SID='*';

Standby:

ALTER SYSTEM SET dg_broker_config_file1='+DATA/db112a_stb/dg_broker1.dat' SCOPE=SPFILE SID='*';
ALTER SYSTEM SET dg_broker_config_file2='+DATA/db112a_stb/dg_broker2.dat'  SCOPE=SPFILE SID='*';
ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=SPFILE SID='*';

Bounce instances if required for SPFILE parameters to take effect.


9) Create Broker configuration (from primary)

[root@prodvm1 trace]# su - oracle
[oracle@prodvm1 ~]$ . oraenv
ORACLE_SID = [oracle] ? db112a1
The Oracle base has been set to /u01/app/oracle

[oracle@prodvm1 ~]$ dgmgrl
DGMGRL for Linux: Version 11.2.0.2.0 - 64bit Production

Copyright (c) 2000, 2009, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect /
Connected.


DGMGRL> create configuration dg112 as
> primary database is db112a connect identifier is db112a_prm_ship;
Configuration "dg112" created with primary database "db112a".

DGMGRL> add database db112a_stb as connect identifier is db112a_stb_ship maintained as physical;
Database "db112a_stb" added.

Set StaticConnectIdentifier (one per instance on each site) so Broker can always reach them:

EDIT INSTANCE db112a1 ON DATABASE db112a
  SET PROPERTY StaticConnectIdentifier =
'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=prodvm1-dg-vip.<domain>)(PORT=1555))
 (CONNECT_DATA=(SERVICE_NAME=db112a_dgmgrl.<domain>)(INSTANCE_NAME=db112a1)(SERVER=DEDICATED)))';

EDIT INSTANCE db112a2 ON DATABASE db112a
  SET PROPERTY StaticConnectIdentifier =
'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=prodvm2-dg-vip.<domain>)(PORT=1555))
 (CONNECT_DATA=(SERVICE_NAME=db112a_dgmgrl.<domain>)(INSTANCE_NAME=db112a2)(SERVER=DEDICATED)))';

EDIT INSTANCE db112a1 ON DATABASE db112a_stb
  SET PROPERTY StaticConnectIdentifier =
'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=stbyvm1-dg-vip.<domain>)(PORT=1555))
 (CONNECT_DATA=(SERVICE_NAME=db112a_stb_dgmgrl.<domain>)(INSTANCE_NAME=db112a1)(SERVER=DEDICATED)))';

EDIT INSTANCE db112a2 ON DATABASE db112a_stb
  SET PROPERTY StaticConnectIdentifier =
'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=stbyvm2-dg-vip.<domain>)(PORT=1555))
 (CONNECT_DATA=(SERVICE_NAME=db112a_stb_dgmgrl.<domain>)(INSTANCE_NAME=db112a2)(SERVER=DEDICATED)))';

Enable:

ENABLE CONFIGURATION;

After initiating the setup, allow some time for the Data Guard Broker to complete the configuration. During this process, the broker generates the necessary configuration files and propagates them to both the Primary and Standby sites.

If all TNS aliases, connect strings, and RDBMS instance parameters are correctly defined, the broker configuration will be enabled successfully without errors. Proper validation of these components is critical to ensure a smooth and reliable Data Guard deployment.

Expected:

DGMGRL> show configuration;

Configuration - dg112

  Protection Mode: MaxPerformance
  Databases:
    db112a - Primary database
    db112a_stb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS
DGMGRL> show database verbose db112a

Database - db112a

  Role:            PRIMARY
  Intended State:  TRANSPORT-ON
  Instance(s):
    db112a1
    db112a2

  Properties:
    DGConnectIdentifier             = 'db112a_prm_ship'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyParallel                   = 'AUTO'
    StandbyFileManagement           = 'MANUAL'
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '4'
    LogArchiveMinSucceedDest        = '1'
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    SidName(*)
    StaticConnectIdentifier(*)
    StandbyArchiveLocation(*)
    AlternateLocation(*)
    LogArchiveTrace(*)
    LogArchiveFormat(*)
    TopWaitEvents(*)
    (*) - Please check specific instance for the property value

Database Status:
SUCCESS


DGMGRL> show database verbose db112a_stb

Database - db112a_stb

  Role:            PHYSICAL STANDBY
  Intended State:  APPLY-ON
  Transport Lag:   0 seconds
  Apply Lag:       0 seconds
  Real Time Query: OFF
  Instance(s):
    db112a1 (apply instance)
    db112a2

  Properties:
    DGConnectIdentifier             = 'db112a_stb_ship'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyParallel                   = 'AUTO'
    StandbyFileManagement           = 'MANUAL'
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '4'
    LogArchiveMinSucceedDest        = '1'
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    SidName(*)
    StaticConnectIdentifier(*)
    StandbyArchiveLocation(*)
    AlternateLocation(*)
    LogArchiveTrace(*)
    LogArchiveFormat(*)
    TopWaitEvents(*)
    (*) - Please check specific instance for the property value

Database Status:
SUCCESS

10) Validate redo transport via DG listener

Check lsnrctl services LISTENER_DG on both sites—you should see the default database services (db112a.<domain> / db112a_stb.<domain>) registered with handlers pointing to the DG VIPs:1555. This ensures redo keeps flowing during switchovers.


Switchover/Failover notes

  • Use dgmgrl for role transitions; static entries + LISTENER_NETWORKS keep services reachable.
  • Confirm StandbyFileManagement (AUTO is recommended for easier file management; your sample shows MANUAL—choose based on policy).
  • Consider ASYNC vs SYNC (LogXptMode) per your RPO/RTO.

Troubleshooting quick hits

  • Broker won’t enable: verify tnsnames.ora symmetry, listener static entries, reachable DG VIPs/ports, and LISTENER_NETWORKS.
  • Services missing in LISTENER_DG: recheck LOCAL_LISTENER aliases and lsnrctl reload.
  • Transport OK but apply lag: confirm APPLY-ON, check I/O, parallel apply (ApplyParallel=AUTO).
  • SCAN confusion: SCAN listeners serve client connections; redo/Broker use LISTENER_DG on the dedicated network.
  • Monitor alert_* and listener_* logs under diag/tnslsnr/*/listener_dg/alert.

Disclaimer

Environment names and values above mirror a lab example. Replace placeholders (<domain>, IPs, ports, db_unique_name, etc.) with your actual settings.

Tags: 11gR212cR1Data Guard Brokerdedicated log shipping networkLISTENER_NETWORKSOracle Data Guard RAC to RACSCAN listener
Previous Post

How to Perform Oracle Data Guard Switchover Manually in 5 Easy Steps

Next Post

Oracle 19c Export/Import Guide: Users, Roles & Tablespaces

Next Post
Oracle 19c Export/Import Guide: Users, Roles & Tablespaces

Oracle 19c Export/Import Guide: Users, Roles & Tablespaces

Comments 2

  1. Pingback: Oracle Data Guard Switchover Manual Method in 5 Easy Steps
  2. Pingback: How to Set LOCAL_LISTENER Parameter in Oracle Database

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

POPULAR NEWS

  • Oracle Patch 38632161: Step-by-Step Guide to Upgrade Oracle 19c to Release Update 19.30

    Oracle Patch 38632161: Step-by-Step Guide to Upgrade Oracle 19c to Release Update 19.30

    0 shares
    Share 0 Tweet 0
  • How To Download And Install The Latest OPatch

    0 shares
    Share 0 Tweet 0
  • How to Install Oracle 19c Database on Red Hat Enterprise Linux 9

    0 shares
    Share 0 Tweet 0
  • Oracle Database 19.32 Release Update (RU) Patching Guide – Patch 39472050

    0 shares
    Share 0 Tweet 0
  • Installing Oracle Database 26AI on Red Hat Enterprise Linux 9

    0 shares
    Share 0 Tweet 0
  • About Us
  • Contact

© 2026 DBAInsight - Smarter Databases. Sharper Insights. DBAInsight.

No Result
View All Result
  • Home
  • Cloud & Modern DBs
  • Guides
  • Cloud Technology
  • Case Studies
  • Troubleshooting
  • Training & Certification

© 2026 DBAInsight - Smarter Databases. Sharper Insights. DBAInsight.

Add as a preferred source on Google
Add as preferred source on Google