RMANでCDB全体を複製(Duplicate)する手順を徹底解説

CDB/PDB(マルチテナント)

Oracle 19c マルチテナント環境(CDB/PDB)では、RMANDUPLICATE コマンドを使って、CDB全体を別ホストにそっくり複製することが可能です。本記事では、補助インスタンスの構成〜RMAN複製成功までの全手順を、実際に成功した事例に基づいて解説します。

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

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


🧭 前提条件

  • ソースCDB(ターゲット):V19M(ホスト:v19single
  • 補助CDB(クローン):CDBCLONE(ホスト:cdbclone
  • Oracle Database 19c
  • リカバリカタログなし
  • Oracleソフトウェアは両ホストにインストール済み

🗂 テキスト構成図

┌────────────┐        RMAN DUPLICATE        ┌────────────┐
│ 本番CDB │ ───────────────────────▶ │ 複製先CDB │
│ V19M │ FROM ACTIVE DATABASE │ CDBCLONE │
│ v19single │ │ cdbclone │
└────────────┘ └────────────┘

🔧 両ホストの初期設定

✅ /etc/hosts にホスト名を追加(両ホスト共通)

sudo vi /etc/hosts

以下を追記してください:

192.168.56.50   v19single
192.168.56.51 cdbclone

✅ $ORACLE_HOME/network/admin/tnsnames.ora の設定(両ホスト共通)

v19single =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = v19single)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = V19M)
)
)

cdbclone =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = cdbclone)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = cdbclone)
)
)

🔧 補助ホスト(cdbclone)の構成手順

✅ ① PFILE作成(initcdbclone.ora)

cat > $ORACLE_HOME/dbs/initcdbclone.ora <<EOF
db_name=cdbclone
db_unique_name=cdbclone
memory_target=2G
compatible=19.0.0
control_files=/u01/app/oracle/oradata/cdbclone/control01.ctl
ENABLE_PLUGGABLE_DATABASE=TRUE
EOF

✅ ② パスワードファイル作成

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

✅ ③ 静的リスナー設定(必要に応じて)

vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = cdbclone)
(SID_NAME = CDBCLONE)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
)
)

リスナーを再起動:

lsnrctl stop
lsnrctl start

✅ ④ PFILEからSPFILEを作成し、インスタンスを起動(nomount)

export ORACLE_SID=CDBCLONE
sqlplus / as sysdba
-- SPFILEを作成
CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/initcdbclone.ora';

-- 再起動してSPFILEから起動
SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT;

🚀 RMAN Duplicate 実行

rman target sys/oracle@v19single auxiliary sys/oracle@cdbclone
DUPLICATE TARGET DATABASE TO CDBCLONE
FROM ACTIVE DATABASE
USING COMPRESSED BACKUPSET
SECTION SIZE 500M
NOFILENAMECHECK;
[oracle@v19single ~]$ export ORACLE_SID=V19M
[oracle@v19single ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 木 5月 15 20:11:42 2025
Version 19.21.0.0.0

Copyright (c) 1982, 2022, Oracle. All rights reserved.



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
4 PDB02 READ WRITE NO
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ rman target sys/oracle@v19single auxiliary sys/oracle@cdbclone

Recovery Manager: Release 19.0.0.0.0 - Production on 木 5月 15 19:43:50 2025
Version 19.21.0.0.0

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

ターゲット・データベース: V19M (DBID=1384470285)に接続されました
補助データベース: CDBCLONEに接続されました(マウントされていません)

RMAN> DUPLICATE TARGET DATABASE TO CDBCLONE
2> FROM ACTIVE DATABASE
3> USING COMPRESSED BACKUPSET
4> SECTION SIZE 500M
5> NOFILENAMECHECK;

Duplicate Dbを25-05-15で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_AUX_DISK_1が割り当てられました
チャネルORA_AUX_DISK_1: SID=38 デバイス・タイプ=DISK
現在のログがアーカイブされました。

メモリー・スクリプトの内容:
{
sql clone "alter system set db_name =
''V19M'' comment=
''Modified by RMAN duplicate'' scope=spfile";
sql clone "alter system set db_unique_name =
''cdbclone'' comment=
''Modified by RMAN duplicate'' scope=spfile";
shutdown clone immediate;
startup clone force nomount
restore clone from service 'v19single' using compressed backupset
primary controlfile;
alter clone database mount;
}
メモリー・スクリプトを実行しています

SQL文: alter system set db_name = ''V19M'' comment= ''Modified by RMAN duplicate'' scope=spfile

SQL文: alter system set db_unique_name = ''cdbclone'' comment= ''Modified by RMAN duplicate'' scope=spfile

Oracleインスタンスがシャットダウンしました

Oracleインスタンスが起動しました

:

メモリー・スクリプトの内容:
{
Alter clone database open resetlogs;
}
メモリー・スクリプトを実行しています

データベースがオープンしました。

メモリー・スクリプトの内容:
{
sql clone "alter pluggable database all open";
}
メモリー・スクリプトを実行しています

SQL文: alter pluggable database all open
Duplicate Dbを25-05-15で終了しました

RMAN>

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

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


✅ 複製成功後の確認

export ORACLE_SID=CDBCLONE
sqlplus / as sysdba

-- PDBの状態確認
SHOW PDBS;

出力例:

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO

4 PDB02 READ WRITE NO
[oracle@cdbclone ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 木 5月 15 20:13:03 2025
Version 19.21.0.0.0

Copyright (c) 1982, 2022, Oracle. All rights reserved.



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
4 PDB02 READ WRITE NO

💡 トラブルシューティングまとめ

エラー原因対応策
ORA-12543ホスト名解決不可/etc/hosts 設定ミス
ORA-65093ENABLE_PLUGGABLE_DATABASE 未設定PFILEに追加
ORA-01034インスタンス未起動startup nomount 実行
RMAN-05537SPFILE指定時に補助が起動済み一旦shutdownしてRMANに任せる

🎯 まとめ

  • ENABLE_PLUGGABLE_DATABASE=TRUE はCDB複製に絶対必要
  • orapwd補助側パスワードファイルを作成
  • PFILEからSPFILEを作成し、startup nomount で準備
  • show pdbsで複製成功を簡単に確認!


[参考]
4 CDBの作成および構成

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

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

コメント

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