コールドクローンで既存のPDBを複製する方法(PDB01 → PDB02)

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

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句でpdb01pdb02への置換を行います。


❄️ 手順①: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:ファイル名のパス中にあるpdb01pdb02に変換

🔸 データファイル名やディレクトリに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の作成および構成

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

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

コメント

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