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
- Background and Basics
- Implementation: Data Guard Construction
- Troubleshooting
- Operational and Security Notes
- FAQ
- Summary
Conclusion: Shortest Steps for Data Guard Broker Construction
The following is the “to-do list” for building the Data Guard Broker:
- Network Settings: Configure
listener.oraandtnsnames.orawith full descriptions on both nodes. - Primary Preparation: Enable ARCHIVELOG mode.
- Standby Preparation: Create the password file and prepare the
init.orafor startup. - DB Duplication: Perform ACTIVE duplication using the RMAN
DUPLICATEcommand. - Environment Setup: Configure
DG_BROKER_STARTand create standby redo logs on both nodes. - 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/ SIDprimary(DB already created with the name “primary”) - Standby: Hostname
dg26ai-standby/ SIDstandby(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 Error | Cause | Resolution |
|---|---|---|
| ORA-12154 | TNS service name cannot be resolved | Re-verify the contents and path of tnsnames.ora. |
| ORA-16698 | Instance already exists | Check for unnecessary configurations before setting DG_BROKER_START. |
| ORA-01017 | Authentication failed | Recreate 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.oraandtnsnames.oraare the key to success. - DB Duplication: Minimize effort with RMAN ACTIVE DUPLICATE.
- Broker: Complete by verifying
SUCCESSin 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).


コメント