他のCDBからPDBをクローンする方法

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

Oracleのリモートクローン機能を使えば、別のCDBに存在するPDBを、DBリンクを使ってまるごとコピーすることができます。
この記事では、v19mcloneのPDB pdb01_clone を、v19mpdb02 としてクローンする方法を、権限設定からデータ確認まで一通り紹介します。

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

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


🧩 クローン構成概要

項目
クローン元CDBv19mclone
クローン元PDBpdb01_clone
クローン元ユーザーtest1_clone(パスワード:test1)
クローン元テーブルtest_tb_clone(データ:NO=111)
クローン先CDBv19m
クローン先PDBpdb02
接続ホスト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-01031SYSTEMにCREATE PLUGGABLE DATABASEがないGRANT ... TO system CONTAINER=ALL を実行
ORA-12154TNSが不正PDB01_CLONEtnsnames.ora を確認
ORA-65010ファイル名競合FILE_NAME_CONVERT を修正して回避

✅ まとめ

Oracleのリモートクローンを成功させるには、クローン元の SYSTEM ユーザーに適切な権限を付与することが最重要ポイントです。

✔ 成功のためのチェックリスト

  • SYSTEMユーザーにCREATE PLUGGABLE DATABASEcontainer=allで付与
  • DBリンクはSYSTEMユーザーで作成
  • FILE_NAME_CONVERTでファイル競合を避ける
  • クローン後にPDBをOPENし、テーブルやデータの確認


[参考]
4 CDBの作成および構成

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

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

コメント

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