Oracle 12.2以降では、PDBをCLOSEせずにオンライン状態のまま複製(=ホットクローン)できる機能が追加されました。
この記事では、既存のPDB(例:PDB01)をREAD WRITEのまま、新しいPDB(PDB02)としてホットクローンする手順を詳しく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔥 ホットクローンとは?
ホットクローン(Hot Clone)とは、クローン元のPDBをREAD WRITE状態のままクローンを作成する方法です。
✅ 特徴
| 項目 | 内容 |
|---|---|
| クローン元 | CLOSE不要・サービス継続可能 |
| 必須条件 | local undo mode = TRUE(ローカルUNDO) |
| 対応バージョン | Oracle 12.2 以降(特に19cで安定) |
🔍 前提条件の確認(ローカルUNDOの確認)
ホットクローンを実行するには、ローカルUNDOモードが有効である必要があります。以下のSQLで確認します。
SELECT property_name, property_value
FROM database_properties
WHERE property_name = 'LOCAL_UNDO_ENABLED';
-- 結果が TRUE であればOK
🔸
FALSEの場合、ホットクローンは使用できません。コールドクローンをご利用ください。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> set lin 1000 pages 1000
SQL> col property_name for a30
SQL> col property_value for a20
SQL> SELECT property_name, property_value
2 FROM database_properties
3 WHERE property_name = 'LOCAL_UNDO_ENABLED';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------
LOCAL_UNDO_ENABLED TRUE ★
🗂 クローン元のファイルパス確認(PDB01)
-- PDB01に切り替えてファイルパス確認
ALTER SESSION SET CONTAINER = pdb01;
SELECT file_name FROM dba_data_files;
-- 例:
/u01/app/oracle/oradata/V19M/pdb01/system01.dbf
/u01/app/oracle/oradata/V19M/pdb01/sysaux01.dbf
...
🛠 ホットクローン手順:PDB01 → PDB02
以下の手順で、PDB01をクローンしてPDB03を作成します。
▼ CDB$ROOTに戻ってから実行
ALTER SESSION SET CONTAINER = cdb$root;
CREATE PLUGGABLE DATABASE pdb02 FROM pdb01
FILE_NAME_CONVERT = ('pdb01','pdb02');
🔸
FILE_NAME_CONVERTは、元のファイル名に含まれる文字列pdb01をpdb02に置換する指定です。
▶ クローン後の処理
-- PDB02をOPEN
ALTER PLUGGABLE DATABASE pdb02 OPEN;
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
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> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO ★PDB01 はオープン状態
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 WRITE NO
5 PDB02 MOUNTED ★作成された
SQL> ALTER PLUGGABLE DATABASE pdb02 OPEN;
プラガブル・データベースが変更されました。
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;
-- 管理ユーザーの確認(例:ADMIN)
SELECT username FROM dba_users WHERE username = 'ADMIN';
📌 手順の流れ(テキスト図)
[PDB01: READ WRITE]
↓
[CREATE PLUGGABLE DATABASE pdb02 FROM pdb01]
↓
[PDB02: 作成される(MOUNT状態)]
↓
[ALTER PLUGGABLE DATABASE pdb02 OPEN]
⚠ よくあるエラーと対処法
| エラー | 内容 | 対処法 |
|---|---|---|
| ORA-65026 | ローカルUNDOが無効 | LOCAL_UNDO_ENABLED=TRUEが必要 |
| ORA-65144 | 管理者ユーザーが存在しない | FROM句では不要、ADMIN USER句は不要です |
| ORA-65010 | ファイル名の競合またはディレクトリ誤り | FILE_NAME_CONVERTを正しく指定 |
✅ ホットクローンとコールドクローンの違いまとめ
| 項目 | ホットクローン | コールドクローン |
|---|---|---|
| 複製元状態 | OPEN(READ WRITE) | READ ONLY(要CLOSE) |
| サービス影響 | なし | 一時停止が必要 |
| 必須条件 | LOCAL_UNDO_ENABLED=TRUE | 特になし |
| 利用可能バージョン | Oracle 12.2以降 | 全バージョン(12c以降) |
✅ まとめ
ホットクローンは、PDBを止めずに複製したいシーンに最適な機能です。
ローカルUNDOが有効であることを確認し、FILE_NAME_CONVERTを正しく指定すれば、システムの稼働を妨げることなくPDBの複製が可能です。
[参考]
4 CDBの作成および構成




コメント