✅ OracleにおけるPDBの作成方法
🔷 前提:マルチテナント構成とは?
-
Oracleのマルチテナント構成では、**1つのCDB(コンテナDB)に複数のPDB(プラガブルDB)**を格納できます。
-
各アプリケーションに専用のPDBを用意することで、独立性・保守性が向上します。
🔧 PDBの作成方法(SEEDからのコピー)
📘 PDB$SEEDとは?
-
Oracleが提供するテンプレートPDB(読み取り専用)
-
新しいPDB作成時にこのSEEDをコピー元として使用
📄 作成に必要な情報
CREATE PLUGGABLE DATABASE
文で以下を指定:
-
新しいPDB名(例:PDB2)
-
管理者ユーザー名とパスワード
-
ファイル格納先のディレクトリ(
FILE_NAME_CONVERT
句で指定)
📁 データファイルの場所の確認方法
以下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 を複製)
または、以下のように CREATE_FILE_DEST
パラメータを使用して保存先を指定することも可能。
-
暗号化されたデータがある場合 →
KEYSTORE IDENTIFIED BY
を付加する必要あり。
📦 クローン後のPDB状態
-
作成直後は MOUNTED状態
-
ALTER PLUGGABLE DATABASE pdb3 OPEN READ WRITE;
でオープンして使用可能に
📑 データのコピー内容
-
デフォルトでは スキーマ/データ/オブジェクトすべてコピー
-
データ不要なら
NO DATA
オプションでメタデータのみコピー可能
-
ソースとターゲットのPDBは互いに独立 → クローン後の変更は同期されない
-
ファイル名には、Oracleが**一意な識別子(GUID)**を自動で追加
🌐 リモートPDBのクローン作成手順
🔗 データベースリンクを使用
-
異なるDBサーバー上のCDBやPDBをクローンしたい場合に使用
-
必須条件:
-
ローカルCDBに Database Link(DBリンク) がある
-
リモート側のリスナーが稼働しており、該当PDBのサービスを受け付けている
-
リモート側のユーザーに
CREATE PLUGGABLE DATABASE
権限付与済み
-
📘 クローンSQL例(リモートPDB → ローカルPDB)
-
作成後は
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の定期的な複製として利用可能。 |
🛠 作成手順(ステップ概要)
-
CDBユーザーでログイン
-
DB_CREATE_FILE_DEST
を設定(Oracle管理ファイルの保存先を指定) -
ソースPDBへのDBリンクを作成
-
CREATE PLUGGABLE DATABASE ... REFRESH MODE
文を実行
補足オプション:
-
REFRESH MODE EVERY 60
:60分間隔で自動更新 -
REFRESH MODE MANUAL
:手動で更新 -
PARALLEL
:処理に割り当てるCPU数指定 -
STANDBY=NONE
:レプリケーション設定がある環境で使用することでレプリケーション影響を回避
🔁 クローンの更新(Refresh)
-
変更手順例:
-
ソースPDBでテーブル作成・データ追加
-
クローンPDBで
REFRESH PLUGGABLE DATABASE
実行 -
REDOログに基づき media recovery(差分適用) が行われる
-
🧪 クローンの動作モード
状態 | 説明 |
---|---|
READ ONLY | リフレッシュ可能。SELECT等の確認が可能。 |
READ WRITE | 更新可能だが、以降リフレッシュ不可。モード変更時に以下を実施: |
sql
✅ 動作確認
-
ソースPDBでの変更(テーブル作成・INSERT等)が、クローンに反映されているかを確認
-
クローンが正常なPDBであるかは
CDB_PLUG_IN_VIOLATIONS
ビューでチェック → レコードがなければ問題なし
✅ Unplug & Plug-in による PDB 移行手法
🔷 概要
Pluggable Database(PDB)を 別のContainer Database(CDB)へ移動 したり、Oracleバージョンアップ時に対象PDBだけアップグレードしたいときに活用されるのが「アンプラグとプラグイン」手法です。
🛠 アンプラグ操作(Unplug)
-
対象PDBをCLOSE
-
ALTER PLUGGABLE DATABASE ... UNPLUG INTO 'pdb.xml';
-
XMLメタデータファイルを出力(tablespace・データファイル構造情報を含む)
-
圧縮アーカイブにすることも可能
-
-
(別サーバーに移動する場合)データファイルとXMLを手動でコピー
🔌 プラグイン操作(Plug-in)
CDBにプラグイン(再接続)するには、次の3つの方法がある:
方法 | 特徴 |
---|---|
NOCOPY | ファイルはそのまま元の場所を使用(最速だが混乱のもとになる可能性あり) |
COPY | ファイルを指定の場所にコピー |
MOVE | ファイルを移動(元には残らない) |
TEMPFILE REUSE
オプション:テンポラリファイルが既存の場合の再利用-
FILE_NAME_CONVERT
オプション:コピー時にファイルのパスを変換 -
AS CLONE
:グローバル一意識別子(GUID) を新しく発行してクローン作成
📌 注意点と補足
-
アンプラグ時に
GUID
を取得して保存しておくと、後の比較や検証に役立つ。 -
DROP PLUGGABLE DATABASE ... KEEP DATAFILES
orSKIP DATAFILES
オプションを使って、元のファイルを保持しながらPDB削除可能。 -
プラグイン前に
DBMS_PDB.CHECK_PLUG_COMPATIBILITY
を実行し、互換性を確認可能。 -
互換性エラーは
CDB_PLUG_IN_VIOLATIONS
ビューで確認。
✅ 作成例(SQL)
✅ 最後の仕上げ
新しく作成したPDBはデフォルトでは OPENされていない。
以下のコマンドで READ WRITE
モードに OPEN する:
✅ アーカイブファイル(圧縮形式)による PDB の移行
🔷 概要
前回のレッスンでは、XMLメタデータファイルを用いて PDB(Pluggable Database)をアンプラグ・プラグインしましたが、
今回は 圧縮アーカイブファイル(拡張子あり) を使って同様の作業を行います。
この方法では、メタデータとデータファイルをまとめて一つのファイルに保存するため、管理が容易になります。
📌 アーカイブファイルでのアンプラグ手順
-
SYSDBA権限のあるユーザーでログイン
-
対象のPDBを
CLOSE
-
ALTER PLUGGABLE DATABASE pdb_name UNPLUG INTO 'pdb_name.pdbarchive';
-
ファイル拡張子によって出力形式が変わる:
-
.xml
→ XMLメタデータファイル -
.pdbarchive
など → アーカイブ形式(圧縮ファイル)
-
-
🔸 ※ 圧縮ファイルは データファイル込み のため、作成には時間がかかります。
🗑 PDBを削除
-
アーカイブファイルにはデータファイルも含まれているため、アンプラグ後に元ファイルを保持する必要なし。
🔌 プラグイン(Plug-in)手順
-
Oracle Managed Files(OMF)を設定しておく(
db_create_file_dest
) -
圧縮アーカイブからPDBを作成:
-
作成後は、PDBを
READ WRITE
モードでOPEN:
🎯 利点
-
移行やバックアップが簡単:アーカイブファイル1つに全情報を内包
-
別のCDBへの移動も容易
-
ファイル管理の手間を削減
-
元のデータファイルを保持する必要がない
💡 注意点
-
アーカイブファイルは XML形式と比べて 生成に時間がかかる
-
プラグイン前には
db_create_file_dest
を設定しておく必要がある -
ファイルパスや保存場所は明示的に管理しておくこと
✅ PDB(Pluggable Database)の削除方法
🔷 概要
DROP PLUGGABLE DATABASE
文を使用すると、PDB を削除できます。
ただし、削除前に以下の条件を満たす必要があります:
-
PDB が 停止(CLOSE) されている
-
または アンプラグ(UNPLUG) 済みであること
📌 削除オプションの違い
オプション | 内容 |
---|---|
INCLUDING DATAFILES | PDB 削除時に、関連するデータファイルも一緒に削除される |
KEEP DATAFILES | PDB は削除するが、データファイルは保持される (共有ストレージ環境で再利用したい場合に便利) |
🧩 注意点・ベストプラクティス
-
削除は CDBルートコンテナ に SYSDBA 権限で接続して実行する必要があります。
-
削除前には:
-
アクティブなセッションがないか確認する
-
削除前に2営業日程度様子を見る(誰かが使っていないか確認するため)
-
-
PDBを削除すると、CDBの制御ファイルからもすべての参照が削除されます。
-
復元は技術的に可能ですが、手順が複雑で、Oracleのバグなどにより問題が起きる場合もあります。