CDB と PDB の基礎
CDB/PDB は Oracle 19c の中核概念です。この章では「何が違うか」だけでなく、「PDB を実際にどう作るか」「作成時オプションをどう選ぶか」まで説明します。
CDB/PDB の役割
CDB(Container Database): 親コンテナ。インスタンス共通の管理を担うPDB(Pluggable Database): 業務データを格納する子DB。アプリは通常こちらに接続
実務では、運用管理者は主に CDB 側、開発者は PDB 側を触ることが多いです。
現在構成の確認
-- CDB かどうか確認
SELECT cdb FROM v$database;
-- 現在コンテナ
SHOW CON_NAME;
-- PDB 一覧
SHOW PDBS;
-- 詳細一覧
SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
PDB 作成の全体手順
- CDB の
SYSDBAで接続する PDB$SEEDから新規 PDB を作成する- PDB を OPEN する
- 再起動後も自動 OPEN されるよう保存する
- PDB 内に業務ユーザーを作成し権限を付与する
PDB を SQL で作る
以下は最小構成に近い実用例です。まず CDB ルートで実行します。
-- CDB ルートへ
ALTER SESSION SET CONTAINER = CDB$ROOT;
CREATE PLUGGABLE DATABASE apppdb
ADMIN USER apppdb_admin IDENTIFIED BY "AdminPass#2026"
ROLES = (DBA)
DEFAULT TABLESPACE users
DATAFILE '/opt/oracle/oradata/ORCLCDB/apppdb/users01.dbf' SIZE 250M AUTOEXTEND ON
FILE_NAME_CONVERT = (
'/opt/oracle/oradata/ORCLCDB/pdbseed/',
'/opt/oracle/oradata/ORCLCDB/apppdb/'
)
STORAGE (MAXSIZE 10G);
ALTER PLUGGABLE DATABASE apppdb OPEN;
ALTER PLUGGABLE DATABASE apppdb SAVE STATE;
FILE_NAME_CONVERT は特に重要です。ここを曖昧にするとデータファイルの配置が崩れ、作成失敗の原因になります。
主要オプション解説
| オプション | 意味 | 初心者向けの判断基準 |
|---|---|---|
ADMIN USER ... IDENTIFIED BY ... | PDB 管理者ユーザー作成 | 必須。まず1人作る |
ROLES = (...) | 管理者へ付与する初期ロール | 検証環境は DBA でも可。本番は最小化 |
DEFAULT TABLESPACE | ユーザー既定表領域 | users を明示 |
FILE_NAME_CONVERT | seed から作る際のファイル配置変換 | 物理パスを必ず明示 |
STORAGE (MAXSIZE ...) | PDB 使用上限の目安 | 検証でも上限を決める |
作成後の初期設定
PDB 作成直後は「接続先が本当に PDB か」を確認してからユーザー作成します。
ALTER SESSION SET CONTAINER = apppdb;
SHOW CON_NAME;
CREATE USER app_user IDENTIFIED BY "AppPass#2026";
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO app_user;
ALTER USER app_user QUOTA 500M ON users;
接続サービス名は PDB ごとに持てます。アプリ接続文字列は PDB サービス名を使います。
sqlplus app_user/AppPass#2026@localhost:1521/apppdb
PDB クローン作成
検証環境を増やすときはクローンが便利です。元 PDB を READ ONLY で開き、複製を作成します。
ALTER PLUGGABLE DATABASE apppdb CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE apppdb OPEN READ ONLY;
CREATE PLUGGABLE DATABASE apppdb_test FROM apppdb
FILE_NAME_CONVERT = (
'/opt/oracle/oradata/ORCLCDB/apppdb/',
'/opt/oracle/oradata/ORCLCDB/apppdb_test/'
);
ALTER PLUGGABLE DATABASE apppdb_test OPEN;
ALTER PLUGGABLE DATABASE apppdb_test SAVE STATE;
初心者の詰まりどころ
- CDB ルートでなく PDB 側で
CREATE PLUGGABLE DATABASEを実行して失敗 FILE_NAME_CONVERTのパス誤り- OPEN だけして
SAVE STATEせず、再起動後に閉じてしまう - 接続先を CDB にしてアプリを起動してしまう
「CDP」は一般的に「CDB」の誤記です。Oracle 19c の正式用語は CDB / PDB です。