CDB と PDB の基礎

CDB/PDB は Oracle 19c の中核概念です。この章では「何が違うか」だけでなく、「PDB を実際にどう作るか」「作成時オプションをどう選ぶか」まで説明します。

CDB/PDB の役割

実務では、運用管理者は主に 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 作成の全体手順

  1. CDB の SYSDBA で接続する
  2. PDB$SEED から新規 PDB を作成する
  3. PDB を OPEN する
  4. 再起動後も自動 OPEN されるよう保存する
  5. 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_CONVERTseed から作る際のファイル配置変換物理パスを必ず明示
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;

初心者の詰まりどころ

「CDP」は一般的に「CDB」の誤記です。Oracle 19c の正式用語は CDB / PDB です。