Oracle 26ai Data Guard Broker 構築手順【OL8】

26ai

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 を構築するための「やることリスト」は以下の通りです。

  1. ネットワーク設定: 両ノードで listener.ora / tnsnames.ora をフル記述で設定。
  2. プライマリ準備: アーカイブログモード化。
  3. スタンバイ準備: パスワードファイル作成、および起動用 init.ora 準備。
  4. DB複製: RMAN の DUPLICATE コマンドによる ACTIVE 複製。
  5. 環境整備: 両ノードで DG_BROKER_START 設定および STANDBY REDO ログの作成。
  6. Broker構成: DGMGRL によるプライマリ・スタンバイの統合。

背景と基礎

Oracle Data Guard Broker とは? Data Guard 構成を論理的なグループとして管理するフレームワークです。手動の SQL 処理を自動化し、SWITCHOVERFAILOVER をコマンド一つで安全に実行可能にします。

一口メモ: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 / SID primary※ primary という名前で DB 作成済み
  • スタンバイ: ホスト名 dg26ai-standby / SID standby※ ソフトウェアインストール済み、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-12154TNSサービス名解決不可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.oratnsnames.ora のフル記述が成功の鍵。
  • DB複製: RMAN ACTIVE DUPLICATE で手間を最小化。
  • Broker: DGMGRLSUCCESS を確認して完了。

[参考]
DG PDB構成(26ai)でのDGMGRLの使用例

本記事は Oracle AI Database 26ai (23.26) を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました