PDB(Pluggable Database)の作成

 


✅ OracleにおけるPDBの作成方法

🔷 前提:マルチテナント構成とは?

  • Oracleのマルチテナント構成では、**1つのCDB(コンテナDB)に複数のPDB(プラガブルDB)**を格納できます。

  • 各アプリケーションに専用のPDBを用意することで、独立性・保守性が向上します。


🔧 PDBの作成方法(SEEDからのコピー)

📘 PDB$SEEDとは?

  • Oracleが提供するテンプレートPDB(読み取り専用)

  • 新しいPDB作成時にこのSEEDをコピー元として使用

📄 作成に必要な情報

CREATE PLUGGABLE DATABASE文で以下を指定:

  1. 新しいPDB名(例:PDB2)

  2. 管理者ユーザー名とパスワード

  3. ファイル格納先のディレクトリ(FILE_NAME_CONVERT句で指定)

sql
CREATE PLUGGABLE DATABASE pdb2
ADMIN USER pdbadmin IDENTIFIED BY password
FILE_NAME_CONVERT = ('/seed_dir/', '/pdb2_dir/');

📁 データファイルの場所の確認方法

以下3つの方法で、データファイルの保存場所を確認可能:

方法説明
db_install.rspインストール時のレスポンスファイルから確認
db_create_file_dest パラメータOracle管理のデータファイル用のディレクトリ。未設定の場合は空
DBA_DATA_FILES ビュー各PDBやCDBのファイルの詳細な場所が分かる

🔍 作成時の注意点・補足

  • 作成直後のPDBは「未使用(UNUSABLE)」状態

  • CDB_PDBSビューで状態確認可

  • 初回はREAD WRITEモードで開く必要あり → これで初期設定が完了し、使用可能になる

  • アラートログを確認して、処理が正常に行われているかを確認するのがベストプラクティス

  • 初回オープン時にリモート接続用サービスも自動作成される

✅ PDBのクローン作成(ローカル/リモート)

🔷 クローン作成とは?

  • 既存のPDB(ソース)を複製して新しいPDB(ターゲット)を作成する操作。

  • データやスキーマをそのままコピー可能。


🔧 クローン作成の主な用途

用途説明
テスト環境の構築本番PDBをコピーして、開発・テストに使用
パフォーマンステスト本番に負荷をかけずに、別CDBで高負荷検証

🏠 ローカルPDBのクローン作成手順

🧾 前提

  • CDBのルートコンテナに接続

  • CREATE PLUGGABLE DATABASE 権限を持つ共通ユーザーで実施

  • CDBが アーカイブログ+ローカルUNDOモード の場合、ホットクローン(READ WRITE状態のまま複製) が可能

  • 本例ではアーカイブログモード未設定のため、コールドクローン(READ ONLYで複製) を実施


🛠 作成例(PDB1 → PDB3 を複製)

sql
CREATE PLUGGABLE DATABASE pdb3 FROM pdb1 FILE_NAME_CONVERT
FILE_NAME_CONVERT = ('/pdb1/', '/pdb3/');

または、以下のように CREATE_FILE_DEST パラメータを使用して保存先を指定することも可能。

  • 暗号化されたデータがある場合 → KEYSTORE IDENTIFIED BY を付加する必要あり。


📦 クローン後のPDB状態

  • 作成直後は MOUNTED状態

  • ALTER PLUGGABLE DATABASE pdb3 OPEN READ WRITE; でオープンして使用可能に


📑 データのコピー内容

  • デフォルトでは スキーマ/データ/オブジェクトすべてコピー

  • データ不要なら NO DATA オプションでメタデータのみコピー可能

sql
CREATE PLUGGABLE DATABASE pdb3 FROM pdb1 NO DATA ...;
  • ソースとターゲットのPDBは互いに独立 → クローン後の変更は同期されない

  • ファイル名には、Oracleが**一意な識別子(GUID)**を自動で追加


🌐 リモートPDBのクローン作成手順

🔗 データベースリンクを使用

  • 異なるDBサーバー上のCDBやPDBをクローンしたい場合に使用

  • 必須条件:

    • ローカルCDBに Database Link(DBリンク) がある

    • リモート側のリスナーが稼働しており、該当PDBのサービスを受け付けている

    • リモート側のユーザーに CREATE PLUGGABLE DATABASE 権限付与済み


📘 クローンSQL例(リモートPDB → ローカルPDB)

sql
CREATE PLUGGABLE DATABASE pdb4
FROM pdb1@remotedblink;
  • 作成後は ALTER PLUGGABLE DATABASE pdb4 OPEN; で使用可能

  • 使用後はDBリンクを削除してもOK

✅ Refresh可能なPDB(Refreshable Clone PDB)

🔷 概要

  • Refreshable Clone PDBは、ソースPDBをクローンした上で、定期的に最新の状態へ更新(refresh)できるPDB

  • クローンPDBが古くなる(stale)課題に対処する仕組み。

  • READ ONLYモードで開きつつ、後から REDOログを反映して更新できる。


🔧 主な利用用途

用途説明
クラウド移行大容量DBの移行時にダウンタイムを最小化するため、事前にRefreshable Cloneを作成しておき、移行直前に差分のみ更新(refresh)する。
テスト・検証環境ソースPDBの定期的な複製として利用可能。

🛠 作成手順(ステップ概要)

  1. CDBユーザーでログイン

  2. DB_CREATE_FILE_DEST を設定(Oracle管理ファイルの保存先を指定)

  3. ソースPDBへのDBリンクを作成

  4. CREATE PLUGGABLE DATABASE ... REFRESH MODE 文を実行

sql
CREATE PLUGGABLE DATABASE clonepdb
FROM pdb1@dblink
REFRESH MODE EVERY 60
FILE_NAME_CONVERT = ('/pdb1/', '/clonepdb/');

補足オプション:

  • REFRESH MODE EVERY 60:60分間隔で自動更新

  • REFRESH MODE MANUAL:手動で更新

  • PARALLEL:処理に割り当てるCPU数指定

  • STANDBY=NONE:レプリケーション設定がある環境で使用することでレプリケーション影響を回避


🔁 クローンの更新(Refresh)

  • 変更手順例:

    • ソースPDBでテーブル作成・データ追加

    • クローンPDBで REFRESH PLUGGABLE DATABASE 実行

    • REDOログに基づき media recovery(差分適用) が行われる

sql
ALTER PLUGGABLE DATABASE clonepdb REFRESH;

🧪 クローンの動作モード

状態説明
READ ONLYリフレッシュ可能。SELECT等の確認が可能。
READ WRITE更新可能だが、以降リフレッシュ不可。モード変更時に以下を実施:
sql
ALTER PLUGGABLE DATABASE clonepdb REFRESH MODE NONE;
ALTER PLUGGABLE DATABASE clonepdb OPEN;

✅ 動作確認

  • ソースPDBでの変更(テーブル作成・INSERT等)が、クローンに反映されているかを確認

  • クローンが正常なPDBであるかは CDB_PLUG_IN_VIOLATIONS ビューでチェック → レコードがなければ問題なし

✅ Unplug & Plug-in による PDB 移行手法


🔷 概要

Pluggable Database(PDB)を 別のContainer Database(CDB)へ移動 したり、Oracleバージョンアップ時に対象PDBだけアップグレードしたいときに活用されるのが「アンプラグとプラグイン」手法です。


🛠 アンプラグ操作(Unplug)

  1. 対象PDBをCLOSE

  2. ALTER PLUGGABLE DATABASE ... UNPLUG INTO 'pdb.xml';

    • XMLメタデータファイルを出力(tablespace・データファイル構造情報を含む)

    • 圧縮アーカイブにすることも可能

  3. (別サーバーに移動する場合)データファイルとXMLを手動でコピー


🔌 プラグイン操作(Plug-in)

CDBにプラグイン(再接続)するには、次の3つの方法がある:

方法特徴
NOCOPYファイルはそのまま元の場所を使用(最速だが混乱のもとになる可能性あり)
COPYファイルを指定の場所にコピー
MOVEファイルを移動(元には残らない)
  • TEMPFILE REUSE オプション:テンポラリファイルが既存の場合の再利用

  • FILE_NAME_CONVERT オプション:コピー時にファイルのパスを変換

  • AS CLONEグローバル一意識別子(GUID) を新しく発行してクローン作成


📌 注意点と補足

  • アンプラグ時GUID を取得して保存しておくと、後の比較や検証に役立つ。

  • DROP PLUGGABLE DATABASE ... KEEP DATAFILES or SKIP DATAFILES オプションを使って、元のファイルを保持しながらPDB削除可能。

  • プラグイン前に DBMS_PDB.CHECK_PLUG_COMPATIBILITY を実行し、互換性を確認可能。

  • 互換性エラーは CDB_PLUG_IN_VIOLATIONS ビューで確認。


✅ 作成例(SQL)

sql
-- NOCOPYモード
CREATE PLUGGABLE DATABASE pdb_new
USING '/path/to/pdb.xml'
NOCOPY
TEMPFILE REUSE;
-- COPYモード
CREATE PLUGGABLE DATABASE pdb_copy
USING '/path/to/pdb.xml'
COPY
FILE_NAME_CONVERT = ('/old_path/', '/new_path/');

✅ 最後の仕上げ

新しく作成したPDBはデフォルトでは OPENされていない
以下のコマンドで READ WRITE モードに OPEN する:

sql
ALTER PLUGGABLE DATABASE pdb_new OPEN READ WRITE;

✅ アーカイブファイル(圧縮形式)による PDB の移行


🔷 概要

前回のレッスンでは、XMLメタデータファイルを用いて PDB(Pluggable Database)をアンプラグ・プラグインしましたが、
今回は 圧縮アーカイブファイル(拡張子あり) を使って同様の作業を行います。

この方法では、メタデータとデータファイルをまとめて一つのファイルに保存するため、管理が容易になります。


📌 アーカイブファイルでのアンプラグ手順

  1. SYSDBA権限のあるユーザーでログイン

  2. 対象のPDBを CLOSE

  3. ALTER PLUGGABLE DATABASE pdb_name UNPLUG INTO 'pdb_name.pdbarchive';

    • ファイル拡張子によって出力形式が変わる:

      • .xml → XMLメタデータファイル

      • .pdbarchive など → アーカイブ形式(圧縮ファイル)

🔸 ※ 圧縮ファイルは データファイル込み のため、作成には時間がかかります。


🗑 PDBを削除

sql
DROP PLUGGABLE DATABASE pdb_name INCLUDING DATAFILES;
  • アーカイブファイルにはデータファイルも含まれているため、アンプラグ後に元ファイルを保持する必要なし。


🔌 プラグイン(Plug-in)手順

  1. Oracle Managed Files(OMF)を設定しておく(db_create_file_dest

  2. 圧縮アーカイブからPDBを作成:

sql
CREATE PLUGGABLE DATABASE pdb_new USING 'path_to/pdb_name.pdbarchive';
  1. 作成後は、PDBを READ WRITE モードでOPEN:

sql
ALTER PLUGGABLE DATABASE pdb_new OPEN READ WRITE;

🎯 利点

  • 移行やバックアップが簡単:アーカイブファイル1つに全情報を内包

  • 別のCDBへの移動も容易

  • ファイル管理の手間を削減

  • 元のデータファイルを保持する必要がない


💡 注意点

  • アーカイブファイルは XML形式と比べて 生成に時間がかかる

  • プラグイン前には db_create_file_dest を設定しておく必要がある

  • ファイルパスや保存場所は明示的に管理しておくこと

✅ PDB(Pluggable Database)の削除方法


🔷 概要

DROP PLUGGABLE DATABASE 文を使用すると、PDB を削除できます。
ただし、削除前に以下の条件を満たす必要があります:

  • PDB が 停止(CLOSE) されている

  • または アンプラグ(UNPLUG) 済みであること


📌 削除オプションの違い

オプション内容
INCLUDING DATAFILESPDB 削除時に、関連するデータファイルも一緒に削除される
KEEP DATAFILESPDB は削除するが、データファイルは保持される
(共有ストレージ環境で再利用したい場合に便利)
※ アーカイブログやバックアップはどちらのオプションでも削除されません。

🧩 注意点・ベストプラクティス

  • 削除は CDBルートコンテナ に SYSDBA 権限で接続して実行する必要があります。

  • 削除前には:

    • アクティブなセッションがないか確認する

    • 削除前に2営業日程度様子を見る(誰かが使っていないか確認するため)

  • PDBを削除すると、CDBの制御ファイルからもすべての参照が削除されます。

  • 復元は技術的に可能ですが、手順が複雑で、Oracleのバグなどにより問題が起きる場合もあります。


🧪 実施手順(例)

sql
-- SYSDBAでCDBに接続
ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
-- データファイルも削除する場合
DROP PLUGGABLE DATABASE pdb_name INCLUDING DATAFILES;
-- データファイルを残す場合
DROP PLUGGABLE DATABASE pdb_name KEEP DATAFILES;