Oracleマルチテナント環境では、既存のPDBを複製して新しいPDBを作成することで、開発・テスト環境の構築が簡単にできます。
この記事では、PDB01を複製してPDB02を作成する「コールドクローン(Cold Clone)」の手順を、ファイル確認からクローン後のOPEN、復旧まで詳しく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
❄️ コールドクローンとは?
コールドクローン(Cold Clone)とは、複製元のPDBをクローズ(CLOSE)し、READ ONLYで開いた状態でクローンを作成する方法です。
以下のような特徴があります。
| 項目 | 内容 |
|---|---|
| 複製元の状態 | 一時的に停止が必要(CLOSE → READ ONLY) |
| メリット | 安定性が高い・シンプル・追加設定不要 |
| デメリット | 複製中は元のPDBを更新できない |
✅ 今回の構成:PDB01 → PDB02(クローン)
┌────────────┐
│ CDB │
├────┬──────────┬──────────┤
│ROOT│PDB01 │PDB02 │
└────┴──────────┴──────────┘
↑
クローン元(READ ONLY)
📂 クローン準備:PDB01のファイルディレクトリを確認
まずは、複製元のPDB(PDB01)のデータファイル格納先を確認しておきます。
-- 現在のPDB一覧を確認
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
-- PDB01に接続
SQL> alter session set container=pdb01;
-- データファイルを確認
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/V19M/pdb01/system01.dbf
/u01/app/oracle/oradata/V19M/pdb01/sysaux01.dbf
/u01/app/oracle/oradata/V19M/pdb01/undotbs01.dbf
...
この情報をもとに、FILE_NAME_CONVERT句でpdb01 → pdb02への置換を行います。
❄️ 手順①:PDB01をREAD ONLYに変更(Cold Cloneの準備)
-- CDB$ROOTに戻る
SQL> alter session set container=cdb$root;
-- PDB01を一度クローズ
SQL> alter pluggable database pdb01 close immediate;
-- READ ONLYで再オープン
SQL> alter pluggable database pdb01 open read only;
🛠 手順②:PDB02をクローン作成(Cold Clone)
CREATE PLUGGABLE DATABASE pdb02 FROM pdb01
FILE_NAME_CONVERT = ('pdb01', 'pdb02');
🔍 解説:
FROM pdb01:クローン元のPDB名を指定FILE_NAME_CONVERT:ファイル名のパス中にあるpdb01をpdb02に変換
🔸 データファイル名やディレクトリに
pdb01が含まれていることが前提です。
▶ 手順③:PDB02をOPENする
ALTER PLUGGABLE DATABASE pdb02 OPEN;
🔁 手順④:PDB01を元のREAD WRITEに戻す
ALTER PLUGGABLE DATABASE pdb01 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE pdb01 OPEN READ WRITE;
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
SQL> alter session set container=pdb01;
セッションが変更されました。
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/V19M/PDB01/system01.dbf
/u01/app/oracle/oradata/V19M/PDB01/sysaux01.dbf
/u01/app/oracle/oradata/V19M/PDB01/undotbs01.dbf
/u01/app/oracle/oradata/V19M/PDB01/users01.dbf
SQL> alter session set container=cdb$root;
セッションが変更されました。
SQL> alter pluggable database pdb01 close immediate;
プラガブル・データベースが変更されました。
SQL> alter pluggable database pdb01 open read only;
プラガブル・データベースが変更されました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ ONLY NO
SQL> CREATE PLUGGABLE DATABASE pdb02 FROM pdb01 ★PDB01 から PDB02 を作成
2 FILE_NAME_CONVERT = ('PDB01','PDB02');
プラガブル・データベースが作成されました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ ONLY NO
5 PDB02 MOUNTED ★作成されている
SQL> ALTER PLUGGABLE DATABASE pdb02 OPEN;
プラガブル・データベースが変更されました。
SQL> ALTER PLUGGABLE DATABASE pdb01 CLOSE IMMEDIATE;
プラガブル・データベースが変更されました。
SQL> ALTER PLUGGABLE DATABASE pdb01 OPEN READ WRITE;
プラガブル・データベースが変更されました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
5 PDB02 READ WRITE NO
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
📋 作成後の確認
-- 全PDBの一覧を表示
SHOW PDBS;
-- PDB02に切り替え
ALTER SESSION SET CONTAINER = pdb02;
-- 現在のコンテナ確認
SHOW CON_NAME;
-- 管理者ユーザーなどの確認
SELECT username FROM dba_users;
🔄 手順の流れ(テキスト図)
[PDB01: READ WRITE]
↓
[1. PDB01をCLOSE → OPEN READ ONLY]
↓
[2. CREATE PLUGGABLE DATABASE pdb02 FROM pdb01]
↓
[3. PDB02をOPEN]
↓
[4. PDB01をCLOSE → OPEN READ WRITE]
⚠ よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| ORA-65016 | 複製元がREAD ONLYでない | PDB01をREAD ONLYにする |
| ORA-65010 | パスが存在しない or 競合 | FILE_NAME_CONVERTの値を見直す |
| ORA-65144 | 管理者ユーザーが存在しない | FROM句を使う場合は不要、ADMIN USER句は使わない |
✅ まとめ
コールドクローンは、元のPDBを一時的に停止してでも安定してコピーしたい場合に最適です。
✔ ポイントまとめ
- 元PDBは CLOSE → OPEN READ ONLY にする必要あり
- ファイル名の変換は
FILE_NAME_CONVERTを使う - 作成後は
OPENして使用可能にする
[参考]
4 CDBの作成および構成




コメント