Oracle 19c マルチテナント環境(CDB/PDB)では、RMAN の DUPLICATE コマンドを使って、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 NO4 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-65093 | ENABLE_PLUGGABLE_DATABASE 未設定 | PFILEに追加 |
| ORA-01034 | インスタンス未起動 | startup nomount 実行 |
| RMAN-05537 | SPFILE指定時に補助が起動済み | 一旦shutdownしてRMANに任せる |
🎯 まとめ
ENABLE_PLUGGABLE_DATABASE=TRUEはCDB複製に絶対必要orapwdで補助側パスワードファイルを作成PFILEからSPFILEを作成し、startup nomountで準備show pdbsで複製成功を簡単に確認!
[参考]
4 CDBの作成および構成




コメント