Oracleのリモートクローン機能を使えば、別のCDBに存在するPDBを、DBリンクを使ってまるごとコピーすることができます。
この記事では、v19mcloneのPDB pdb01_clone を、v19mに pdb02 としてクローンする方法を、権限設定からデータ確認まで一通り紹介します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🧩 クローン構成概要
| 項目 | 値 |
|---|---|
| クローン元CDB | v19mclone |
| クローン元PDB | pdb01_clone |
| クローン元ユーザー | test1_clone(パスワード:test1) |
| クローン元テーブル | test_tb_clone(データ:NO=111) |
| クローン先CDB | v19m |
| クローン先PDB | pdb02 |
| 接続ホスト | restart |
| TNSエントリ名 | PDB01_CLONE(tnsnames.oraで定義) |
📂 使用するtnsnames.ora(v19m 側)
[oracle@v19single ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
PDB01_CLONE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = restart)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb01_clone)
)
)
🔑 事前準備:クローン元CDBで SYSTEM に権限付与
リモートクローンには、クローン元PDBに対して SYSTEM ユーザーが PDB 作成権限を持っていることが必要です。
▼ v19mclone 側で実行:
-- CDB$ROOT で実行
GRANT CREATE PLUGGABLE DATABASE TO system CONTAINER=ALL;
-- 結果
権限付与が成功しました。
🔸 この権限がないと、クローン実行時に
ORA-01031: 権限が不足していますが発生します。
🔗 DBリンク作成(v19m 側)
-- v19m の CDB$ROOT で実行
CREATE DATABASE LINK to_pdb01_clone
CONNECT TO system IDENTIFIED BY oracle
USING 'PDB01_CLONE';
🔸
systemユーザーがクローン元PDBにログインでき、必要な権限があることを前提とします。
📂 クローン元のデータファイルを確認(v19mclone 側)
ALTER SESSION SET CONTAINER = pdb01_clone;
SELECT file_name FROM dba_data_files;
-- 例:
/u01/app/oracle/oradata/v19mclone/pdb01_clone/system01.dbf
🛠 クローン実行(v19m 側)
-- v19m の CDB$ROOT で実行
CREATE PLUGGABLE DATABASE pdb02 FROM pdb01_clone@to_pdb01_clone
FILE_NAME_CONVERT = ('pdb01_clone', 'pdb02');
▶ クローンされた PDB を OPEN
ALTER PLUGGABLE DATABASE pdb02 OPEN;
🔍 データ確認:ユーザー・テーブル・行内容
-- PDB02 に切り替え
ALTER SESSION SET CONTAINER = pdb02;
-- ユーザー存在確認
SELECT username FROM dba_users WHERE username = 'TEST1_CLONE';
-- test1_clone ユーザーで接続
CONNECT test1_clone/test1;
-- テーブル一覧
SELECT table_name FROM user_tables;
-- テーブルの中身
SELECT * FROM test_tb_clone;
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> CREATE PLUGGABLE DATABASE pdb02 FROM pdb01_clone@to_pdb01_clone ★クローン
2 FILE_NAME_CONVERT = ('PDB01_clone', 'pdb02');
プラガブル・データベースが作成されました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
4 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
SQL> alter session set container=pdb02;
セッションが変更されました。
SQL> select * from test1_clone.test_tb_clone;
NO
----------
111 ★
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
✅ 結果例:
NO
----------
111
⚠ よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| ORA-01031 | SYSTEMにCREATE PLUGGABLE DATABASEがない | GRANT ... TO system CONTAINER=ALL を実行 |
| ORA-12154 | TNSが不正 | PDB01_CLONE の tnsnames.ora を確認 |
| ORA-65010 | ファイル名競合 | FILE_NAME_CONVERT を修正して回避 |
✅ まとめ
Oracleのリモートクローンを成功させるには、クローン元の SYSTEM ユーザーに適切な権限を付与することが最重要ポイントです。
✔ 成功のためのチェックリスト
- SYSTEMユーザーに
CREATE PLUGGABLE DATABASEをcontainer=allで付与 - DBリンクはSYSTEMユーザーで作成
- FILE_NAME_CONVERTでファイル競合を避ける
- クローン後にPDBをOPENし、テーブルやデータの確認
[参考]
4 CDBの作成および構成




コメント