Oracle 26ai Data Guard Broker Setup Procedure [OL8]

26ai

This article explains the complete procedure for building a High Availability (HA) configuration using Data Guard Broker in an Oracle AI Database 26ai (23.26) environment. By automating Data Guard construction with the Broker, you can eliminate operational errors such as those during switchovers and realize a robust database environment on Oracle Linux 8 (OL8).

Conclusion: Shortest Steps for Data Guard Broker Construction

The following is the “to-do list” for building the Data Guard Broker:

  1. Network Settings: Configure listener.ora and tnsnames.ora with full descriptions on both nodes.
  2. Primary Preparation: Enable ARCHIVELOG mode.
  3. Standby Preparation: Create the password file and prepare the init.ora for startup.
  4. DB Duplication: Perform ACTIVE duplication using the RMAN DUPLICATE command.
  5. Environment Setup: Configure DG_BROKER_START and create standby redo logs on both nodes.
  6. Broker Configuration: Integrate the Primary and Standby using DGMGRL.

Background and Basics

What is Oracle Data Guard Broker?

It is a framework that manages Data Guard configurations as a logical group. It automates manual SQL processing, allowing for safe execution of switchover or failover operations with a single command.

Quick Note: Characteristics of 26ai (AI Database)

While 26ai is the next-generation version with deeper AI integration, the basics of Data Guard inherit the concept of protection at the CDB level. PDBs are also synchronized collectively.

Implementation: Data Guard Construction

Prerequisites

  • Target OS: Oracle Linux 8 (OL8)
  • DB Version: Oracle AI Database 26ai (23.26.1.0.0)
  • Primary: Hostname dg26ai-primary / SID primary (DB already created with the name “primary”)
  • Standby: Hostname dg26ai-standby / SID standby (Software installed; DB not yet created)

Step 1: [Primary Side] Network and DB Mode Settings

1-1. Listener Configuration (listener.ora)

Perform static registration to allow RMAN connections even when the instance is stopped.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dg26ai-primary)(PORT = 1521))))

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = primary)
      (ORACLE_HOME = /u01/app/oracle/product/23.0.0/dbhome_1)))

1-2. Net Service Name Settings (tnsnames.ora)

List all connection destinations without abbreviation.

primary =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dg26ai-primary)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = primary)))

standby =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dg26ai-standby)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = standby)))

PDB01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dg26ai-primary)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PDB01)))

1-3. Enabling ARCHIVELOG Mode

-- From status check to enablement
SQL> ARCHIVE LOG LIST; -- If "No Archive Mode", execute the following:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Step 2: [Standby Side] Instance Preparation

2-1. Password File Creation

This must match the SYS password of the Primary.

orapwd file=$ORACLE_HOME/dbs/orapwstandby password=oracle entries=10 format=12

2-2. Network Settings

Create listener.ora and tnsnames.ora for the Standby and start the listener.

lsnrctl start

2-3. Creation of Startup Initialization Parameter File (init.ora)

This is the minimum setting required to start the RMAN duplication. Write the following in /var/tmp/init.ora:

db_name=primary

Note: This single line is sufficient because the SPFILE will be automatically configured from the Primary during the DUPLICATE execution.

2-4. Startup in NOMOUNT State

SQL> STARTUP NOMOUNT PFILE='/var/tmp/init.ora';

Step 3: [Standby Side] DB Duplication via RMAN

Clone the Primary data to the Standby over the network.

rman target sys/oracle@primary auxiliary sys/oracle@standby

Execute at the RMAN prompt:

DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE
DORECOVER
SPFILE
  SET DB_UNIQUE_NAME='standby'
  SET LOG_ARCHIVE_DEST_2='service=primary ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary'
  SET FAL_SERVER='primary'
  SET DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/PRIMARY/','/u01/app/oracle/oradata/STANDBY/'
  SET LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/PRIMARY/','/u01/app/oracle/oradata/STANDBY/'
  SET CONTROL_FILES='/u01/app/oracle/oradata/STANDBY/control01.ctl'
  SET STANDBY_FILE_MANAGEMENT='AUTO'
NOFILENAMECHECK;

🖥️ Execution results using a real device

View execution results (click here)

RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE
2> DUPLIDORECOVER
3> SPFILE
4>   SET DB_UNIQUE_NAME='standby'
5>   SET LOG_ARCHIVE_DEST_2='service=primary ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary'
6>   SET FAL_SERVER='primary'
7>   SET DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/PRIMARY/','/u01/app/oracle/oradata/STANDBY/'
8>   SET LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/PRIMARY/','/u01/app/oracle/oradata/STANDBY/'
9>   SET CONTROL_FILES='/u01/app/oracle/oradata/STANDBY/control01.ctl'
10>   SET STANDBY_FILE_MANAGEMENT='AUTO'
11> NOFILENAMECHECK;
Starting Duplicate Db at 14-FEB-26
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=201 device type=DISK
current log archived

contents of Memory Script:
{
   backup as copy reuse
   passwordfile auxiliary format  '/u01/app/oracle/product/23.0.0/dbhome_1/dbs/orapwstandby'   ;
   restore clone from service  'primary' spfile to
 '/u01/app/oracle/product/23.0.0/dbhome_1/dbs/spfilestandby.ora';
   sql clone "alter system set spfile= ''/u01/app/oracle/product/23.0.0/dbhome_1/dbs/spfilestandby.ora''";
}
executing Memory Script

Starting backup at 14-FEB-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=288 device type=DISK
Finished backup at 14-FEB-26

Starting restore at 14-FEB-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 primary
channel ORA_AUX_DISK_1: restoring SPFILE
output file name=/u01/app/oracle/product/23.0.0/dbhome_1/dbs/spfilestandby.ora
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 14-FEB-26

sql statement: alter system set spfile= ''/u01/app/oracle/product/23.0.0/dbhome_1/dbs/spfilestandby.ora''

contents of Memory Script:
{
   sql clone "alter system set  db_unique_name =
 ''standby'' comment=
 '''' scope=spfile";
   sql clone "alter system set  LOG_ARCHIVE_DEST_2 =
 ''service=PRI_DB ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary'' comment=
 '''' scope=spfile";
   sql clone "alter system set  FAL_SERVER =
 ''primary'' comment=
 '''' scope=spfile";
   sql clone "alter system set  db_file_name_convert =
 ''/u01/app/oracle/oradata/PRIMARY/'', ''/u01/app/oracle/oradata/STANDBY/'' comment=
 '''' scope=spfile";
   sql clone "alter system set  LOG_FILE_NAME_CONVERT =
 ''/u01/app/oracle/oradata/PRIMARY/'', ''/u01/app/oracle/oradata/STANDBY/'' comment=
 '''' scope=spfile";
   sql clone "alter system set  CONTROL_FILES =
 ''/u01/app/oracle/oradata/STANDBY/control01.ctl'' comment=
 '''' scope=spfile";
   sql clone "alter system set  STANDBY_FILE_MANAGEMENT =
 ''AUTO'' comment=
 '''' scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
}
executing Memory Script

sql statement: alter system set  db_unique_name =  ''standby'' comment= '''' scope=spfile

sql statement: alter system set  LOG_ARCHIVE_DEST_2 =  ''service=PRI_DB ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary'' comment= '''' scope=spfile

sql statement: alter system set  FAL_SERVER =  ''primary'' comment= '''' scope=spfile

sql statement: alter system set  db_file_name_convert =  ''/u01/app/oracle/oradata/PRIMARY/'', ''/u01/app/oracle/oradata/STANDBY/'' comment= '''' scope=spfile

sql statement: alter system set  LOG_FILE_NAME_CONVERT =  ''/u01/app/oracle/oradata/PRIMARY/'', ''/u01/app/oracle/oradata/STANDBY/'' comment= '''' scope=spfile

sql statement: alter system set  CONTROL_FILES =  ''/u01/app/oracle/oradata/STANDBY/control01.ctl'' comment= '''' scope=spfile

sql statement: alter system set  STANDBY_FILE_MANAGEMENT =  ''AUTO'' comment= '''' scope=spfile

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area    1523814192 bytes

Fixed Size                     5009200 bytes
Variable Size                956301312 bytes
Database Buffers             553648128 bytes
Redo Buffers                   8855552 bytes

contents of Memory Script:
{
   restore clone from service  'primary' standby controlfile;
}
executing Memory Script

Starting restore at 14-FEB-26
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=276 device type=DISK

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:04
output file name=/u01/app/oracle/oradata/STANDBY/control01.ctl
Finished restore at 14-FEB-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
 "/u01/app/oracle/oradata/STANDBY/temp01.dbf";
   set newname for tempfile  2 to
 "/u01/app/oracle/oradata/STANDBY/pdbseed/temp01.dbf";
   set newname for tempfile  3 to
 "/u01/app/oracle/oradata/STANDBY/PDB01/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/u01/app/oracle/oradata/STANDBY/system01.dbf";
   set newname for datafile  2 to
 "/u01/app/oracle/oradata/STANDBY/pdbseed/system01.dbf";
   set newname for datafile  3 to
 "/u01/app/oracle/oradata/STANDBY/sysaux01.dbf";
   set newname for datafile  4 to
 "/u01/app/oracle/oradata/STANDBY/pdbseed/sysaux01.dbf";
   set newname for datafile  7 to
 "/u01/app/oracle/oradata/STANDBY/users01.dbf";
   set newname for datafile  9 to
 "/u01/app/oracle/oradata/STANDBY/pdbseed/undotbs01.dbf";
   set newname for datafile  11 to
 "/u01/app/oracle/oradata/STANDBY/undotbs01.dbf";
   set newname for datafile  12 to
 "/u01/app/oracle/oradata/STANDBY/PDB01/system01.dbf";
   set newname for datafile  13 to
 "/u01/app/oracle/oradata/STANDBY/PDB01/sysaux01.dbf";
   set newname for datafile  14 to
 "/u01/app/oracle/oradata/STANDBY/PDB01/undotbs01.dbf";
   set newname for datafile  15 to
 "/u01/app/oracle/oradata/STANDBY/PDB01/users01.dbf";
   restore
   from  nonsparse   from service
 'primary'   clone database
   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

renamed tempfile 1 to /u01/app/oracle/oradata/STANDBY/temp01.dbf in control file
renamed tempfile 2 to /u01/app/oracle/oradata/STANDBY/pdbseed/temp01.dbf in control file
renamed tempfile 3 to /u01/app/oracle/oradata/STANDBY/PDB01/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

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 14-FEB-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 primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/STANDBY/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:01:15
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/STANDBY/pdbseed/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:36
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/STANDBY/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/STANDBY/pdbseed/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:35
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/STANDBY/users01.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 primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00009 to /u01/app/oracle/oradata/STANDBY/pdbseed/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:07
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00011 to /u01/app/oracle/oradata/STANDBY/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00012 to /u01/app/oracle/oradata/STANDBY/PDB01/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:35
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00013 to /u01/app/oracle/oradata/STANDBY/PDB01/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00014 to /u01/app/oracle/oradata/STANDBY/PDB01/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:07
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00015 to /u01/app/oracle/oradata/STANDBY/PDB01/users01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 14-FEB-26

sql statement: alter system archive log current
current log archived

contents of Memory Script:
{
   restore clone force from service  'primary'
           archivelog from scn  2078202;
   switch clone datafile all;
}
executing Memory Script

Starting restore at 14-FEB-26
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=2
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup set from service primary
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=3
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 14-FEB-26

datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=1225167639 file name=/u01/app/oracle/oradata/STANDBY/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=2 STAMP=1225167639 file name=/u01/app/oracle/oradata/STANDBY/pdbseed/system01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=3 STAMP=1225167639 file name=/u01/app/oracle/oradata/STANDBY/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=4 STAMP=1225167639 file name=/u01/app/oracle/oradata/STANDBY/pdbseed/sysaux01.dbf
datafile 7 switched to datafile copy
input datafile copy RECID=5 STAMP=1225167639 file name=/u01/app/oracle/oradata/STANDBY/users01.dbf
datafile 9 switched to datafile copy
input datafile copy RECID=6 STAMP=1225167639 file name=/u01/app/oracle/oradata/STANDBY/pdbseed/undotbs01.dbf
datafile 11 switched to datafile copy
input datafile copy RECID=7 STAMP=1225167639 file name=/u01/app/oracle/oradata/STANDBY/undotbs01.dbf
datafile 12 switched to datafile copy
input datafile copy RECID=8 STAMP=1225167639 file name=/u01/app/oracle/oradata/STANDBY/PDB01/system01.dbf
datafile 13 switched to datafile copy
input datafile copy RECID=9 STAMP=1225167640 file name=/u01/app/oracle/oradata/STANDBY/PDB01/sysaux01.dbf
datafile 14 switched to datafile copy
input datafile copy RECID=10 STAMP=1225167640 file name=/u01/app/oracle/oradata/STANDBY/PDB01/undotbs01.dbf
datafile 15 switched to datafile copy
input datafile copy RECID=11 STAMP=1225167640 file name=/u01/app/oracle/oradata/STANDBY/PDB01/users01.dbf

contents of Memory Script:
{
   set until scn  2078564;
   recover
   standby
   clone database
    delete archivelog
   ;
}
executing Memory Script

executing command: SET until clause (SCN)

Starting recover at 14-FEB-26
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 2 is already on disk as file /u01/app/oracle/product/23.0.0/dbhome_1/dbs/arch1_2_1225164108.dbf
archived log for thread 1 with sequence 3 is already on disk as file /u01/app/oracle/product/23.0.0/dbhome_1/dbs/arch1_3_1225164108.dbf
recovery status time_needed 2026-02-14 04:14:59
archived log file name=/u01/app/oracle/product/23.0.0/dbhome_1/dbs/arch1_2_1225164108.dbf thread=1 sequence=2
recovery status time_needed 2026-02-14 04:20:34
archived log file name=/u01/app/oracle/product/23.0.0/dbhome_1/dbs/arch1_3_1225164108.dbf thread=1 sequence=3
media recovery complete, elapsed time: 00:00:00
Finished recover at 14-FEB-26

contents of Memory Script:
{
   delete clone force archivelog all;
}
executing Memory Script

released channel: ORA_DISK_1
released channel: ORA_AUX_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=288 device type=DISK
deleted archived log
archived log file name=/u01/app/oracle/product/23.0.0/dbhome_1/dbs/arch1_2_1225164108.dbf RECID=1 STAMP=1225167637
deleted archived log
archived log file name=/u01/app/oracle/product/23.0.0/dbhome_1/dbs/arch1_3_1225164108.dbf RECID=2 STAMP=1225167638
Deleted 2 objects

Finished Duplicate Db at 14-FEB-26


RMAN>
    

Step 4: [Both Nodes] Broker Enablement and Standby Redo Log Creation

Common tasks to complete the configuration after duplication is finished.

4-1. Broker Startup and Force Logging Setting

Execute in SQL*Plus on both Primary and Standby nodes.

SQL> ALTER SYSTEM SET DG_BROKER_START=TRUE;
SQL> ALTER DATABASE FORCE LOGGING;

4-2. Adding Standby Redo Logs

Essential for real-time synchronization. Create one more group than the online redo logs.

[Standby Side]

ALTER DATABASE ADD STANDBY LOGFILE GROUP 11 '/u01/app/oracle/oradata/STANDBY/slog01.log' SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 12 '/u01/app/oracle/oradata/STANDBY/slog02.log' SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 13 '/u01/app/oracle/oradata/STANDBY/slog03.log' SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 14 '/u01/app/oracle/oradata/STANDBY/slog04.log' SIZE 200M;

[Primary Side]

ALTER DATABASE ADD STANDBY LOGFILE GROUP 11 '/u01/app/oracle/oradata/PRIMARY/slog01.log' SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 12 '/u01/app/oracle/oradata/PRIMARY/slog02.log' SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 13 '/u01/app/oracle/oradata/PRIMARY/slog03.log' SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 14 '/u01/app/oracle/oradata/PRIMARY/slog04.log' SIZE 200M;

Step 5: [Primary Side] Broker Configuration via DGMGRL

Finally, integrate using the management tool DGMGRL.

What is DGMGRL? DGMGRL (Data Guard Manager Command-Line Interface) is a dedicated command-line interface for operating the Data Guard Broker. Unlike standard SQL*Plus, it treats the Primary and Standby as a single “Configuration,” allowing for switchovers, status monitoring, and changes to Data Guard-specific parameters to be performed collectively and safely.

dgmgrl sys/oracle
DGMGRL> CREATE CONFIGURATION 'orcl_config' AS PRIMARY DATABASE IS 'primary' CONNECT IDENTIFIER IS primary;
DGMGRL> ADD DATABASE 'standby' AS CONNECT IDENTIFIER IS standby;
DGMGRL> ENABLE CONFIGURATION;
DGMGRL> SHOW CONFIGURATION;
[oracle@dg26ai-primary ~]$ dgmgrl sys/oracle
DGMGRL for Linux: Release 23.26.1.0.0 - Production on Sat Feb 14 05:05:28 2026
Version 23.26.1.0.0

Copyright (c) 1982, 2026, Oracle and/or its affiliates. All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "primary"
Connected as SYSDBA.
DGMGRL> CREATE CONFIGURATION 'orcl_config' AS PRIMARY DATABASE IS 'primary' CONNECT IDENTIFIER IS primary;
Connected to "primary"
Configuration "orcl_config" created with primary database "primary"
DGMGRL> ADD DATABASE 'standby' AS CONNECT IDENTIFIER IS standby;
Database "standby" added
DGMGRL> ENABLE CONFIGURATION;
Enabled.
DGMGRL> SHOW CONFIGURATION;

Configuration - orcl_config

Protection Mode: MaxPerformance
Members:
primary - Primary database
standby - Physical standby database

Fast-Start Failover: Disabled

Configuration Status:
SUCCESS (status updated 55 seconds ago)

DGMGRL>

Troubleshooting

ORA ErrorCauseResolution
ORA-12154TNS service name cannot be resolvedRe-verify the contents and path of tnsnames.ora.
ORA-16698Instance already existsCheck for unnecessary configurations before setting DG_BROKER_START.
ORA-01017Authentication failedRecreate the password file by copying it from the Primary.

Operational and Security Notes

  • Reversion Method: If construction fails, physically delete the data files and control files on the Standby side and restart from STARTUP NOMOUNT.
  • Redo Log Size: Ensure that the sizes of the online redo logs and standby redo logs match exactly.

FAQ

Q: Is it really okay to have only db_name in the Standby’s init.ora? A: Yes. Since the DUPLICATE command pulls the SPFILE from the Primary and performs a restart with the appropriate parameters, the minimum setting is sufficient for the initial startup.

Q: Are there any precautions specific to 26ai? A: While AI-related diagnostic messages may appear in the logs, there are no major changes to the construction flow of Data Guard itself.

Summary

  • Network: Full descriptions in listener.ora and tnsnames.ora are the key to success.
  • DB Duplication: Minimize effort with RMAN ACTIVE DUPLICATE.
  • Broker: Complete by verifying SUCCESS in DGMGRL.

[reference]
Scenarios for Using DGMGRL with a DG PDB Configuration (26ai)

This article targets Oracle AI Database 26ai (23.26). (Screens and default values may differ for other versions).

コメント

Copied title and URL