Oracle AI Database 26ai (23.26) 環境において、Data Guard Broker を使用して高可用性構成を構築する complete な手順を解説します。Data Guard 構築を Broker で自動化することで、スイッチオーバー等の運用ミスを排除し、OL8 上で堅牢な DB 環境を実現します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
結論:Data Guard Broker 構築の最短ステップ
Data Guard Broker を構築するための「やることリスト」は以下の通りです。
- ネットワーク設定: 両ノードで
listener.ora/tnsnames.oraをフル記述で設定。 - プライマリ準備: アーカイブログモード化。
- スタンバイ準備: パスワードファイル作成、および起動用
init.ora準備。 - DB複製: RMAN の
DUPLICATEコマンドによる ACTIVE 複製。 - 環境整備: 両ノードで
DG_BROKER_START設定および STANDBY REDO ログの作成。 - Broker構成:
DGMGRLによるプライマリ・スタンバイの統合。
背景と基礎
Oracle Data Guard Broker とは? Data Guard 構成を論理的なグループとして管理するフレームワークです。手動の SQL 処理を自動化し、SWITCHOVER や FAILOVER をコマンド一つで安全に実行可能にします。
一口メモ:26ai (AI Database) の特徴 26ai は AI 統合を深めた次世代版ですが、Data Guard の基礎は CDB 単位での保護を継承しています。PDB も一括で同期対象となります。
手順・実装:Data Guard 構築
前提条件
- 対象OS: Oracle Linux 8 (OL8)
- DBバージョン: Oracle AI Database 26ai (23.26.1.0.0)
- プライマリ: ホスト名
dg26ai-primary/ SIDprimary(※ primary という名前で DB 作成済み) - スタンバイ: ホスト名
dg26ai-standby/ SIDstandby(※ ソフトウェアインストール済み、DB は未作成)
ステップ1:【プライマリ側】ネットワークと DB モード設定
1-1. リスナー設定(listener.ora)
静的登録を行い、インスタンス停止時も RMAN 接続を可能にします。
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. ネットサービス名設定(tnsnames.ora)
全ての接続先を省略せずに記載します。
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. アーカイブログモードの有効化
-- 状態確認から有効化まで
SQL> ARCHIVE LOG LIST; -- 「No Archive Mode」の場合以下を実行
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
ステップ2:【スタンバイ側】インスタンスの準備
2-1. パスワードファイルの作成
プライマリの SYS パスワードと一致させる必要があります。
orapwd file=$ORACLE_HOME/dbs/orapwstandby password=oracle entries=10 format=12
2-2. ネットワーク設定
listener.ora および tnsnames.ora をスタンバイ用に作成し、リスナーを起動します。
lsnrctl start
2-3. 起動用初期化パラメータファイル(init.ora)の作成
RMAN 複製を開始するために必要な最小限の設定です。/var/tmp/init.ora に以下を記載します。
db_name=primary
※ DUPLICATE 実行時にプライマリの SPFILE から自動構成されるため、この 1 行で十分です。
2-4. NOMOUNT 状態での起動
SQL> STARTUP NOMOUNT PFILE='/var/tmp/init.ora';
ステップ3:【スタンバイ側】RMAN による DB 複製
プライマリのデータをネットワーク経由でスタンバイへ複製します。
rman target sys/oracle@primary auxiliary sys/oracle@standby
-- RMAN プロンプトで実行
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;
🖥️ 実機を使用した実行結果
実行結果を表示(ここをクリック)
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>
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
ステップ4:【両ノード】Broker 有効化と STANDBY REDO ログ作成
複製完了後、構成を完成させるための共通作業です。
4-1. Broker 起動と強制ロギング設定
プライマリ・スタンバイ両方の SQL*Plus で実行します。
SQL> ALTER SYSTEM SET DG_BROKER_START=TRUE;
SQL> ALTER DATABASE FORCE LOGGING;
4-2. STANDBY REDO ログの追加
リアルタイム同期に必須です。オンライン REDO ログより 1 グループ多く作成します。
【スタンバイ側】
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;
【プライマリ側】
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;
ステップ5:【プライマリ側】DGMGRL による Broker 構成
最後に管理ツール DGMGRL で統合します。
DGMGRL とは? DGMGRL (Data Guard Manager Command-Line Interface) は、Data Guard Broker を操作するための専用コマンドライン・インタフェースです。通常の SQL*Plus とは異なり、プライマリとスタンバイをひとつの「構成(Configuration)」として扱い、スイッチオーバーの実行、構成のステータス監視、Data Guard 固有パラメータの変更を一括で安全に行うことができます。
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>
トラブルシューティング
| ORAエラー | 原因 | 対処法 |
|---|---|---|
| ORA-12154 | TNSサービス名解決不可 | tnsnames.ora の内容とパスを再確認。 |
| ORA-16698 | インスタンスが既にある | DG_BROKER_START 設定前に不要な構成がないか確認. |
| ORA-01017 | 認証失敗 | パスワードファイルをプライマリからコピーして再作成。 |
運用・セキュリティ上の注意
- 戻し方: 構築に失敗した場合は、スタンバイ側のデータファイル・制御ファイルを物理削除し、
STARTUP NOMOUNTからやり直してください。 - REDO ログのサイズ: オンライン REDO ログと STANDBY REDO ログのサイズは必ず一致させてください。
FAQ
Q: スタンバイ側の init.ora は db_name だけで本当に大丈夫? A: はい、DUPLICATE コマンドがプライマリから SPFILE を吸い出し、適切なパラメータで上書き再起動するため、初期起動用としては最小限で問題ありません。
Q: 26ai 特有の注意点は? A: ログ出力に AI 関連の診断メッセージが含まれることがありますが、Data Guard 自体の構築フローに大きな変更はありません。
まとめ
- ネットワーク:
listener.oraとtnsnames.oraのフル記述が成功の鍵。 - DB複製:
RMAN ACTIVE DUPLICATEで手間を最小化。 - Broker:
DGMGRLでSUCCESSを確認して完了。
[参考]
DG PDB構成(26ai)でのDGMGRLの使用例
本記事は Oracle AI Database 26ai (23.26) を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?



コメント