アプリケーションシードの作成と、それを元にアプリケーションPDBを作成する方法

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

~APP_ROOT$SEEDを活用した効率的なアプリケーションPDB展開~

Oracle Database 12.2以降のMultitenant構成において、アプリケーション・コンテナ(APP_ROOT)の配下でアプリケーションを複数のPDBに展開する際、アプリケーションシード(APP_ROOT$SEED)を使うことで作業効率が飛躍的に向上します。

本記事では以下の手順を詳しく解説します:

  1. アプリケーションシード(APP_ROOT$SEED)の作成と同期
  2. APP_ROOT$SEEDをベースとしたアプリケーションPDBの作成

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

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


✅ この記事の前提条件

  • APP_ROOTがすでに作成済みであること
  • アプリケーション sales_app バージョン1.0 がAPP_ROOTに定義済み
  • APP_USER01(または管理ユーザー)などのスキーマがAPP_ROOTに存在
  • Oracle Database 12.2以降(Multitenant構成)

1. アプリケーションシード(APP_ROOT$SEED)の作成

1.1 APP_ROOTに接続

ALTER SESSION SET CONTAINER = app_root;

1.2 アプリケーションシードの作成

CREATE PLUGGABLE DATABASE AS SEED
ADMIN USER app_admin IDENTIFIED BY oracle
FILE_NAME_CONVERT = ('/pdbseed/', '/app_seed/');

✅ このコマンドにより、APP_ROOT$SEED というPDBが自動的に作成されます。

1.3 PDBの状態確認

SHOW PDBS

出力例:

pgsqlコピーする編集する    CON_ID CON_NAME        OPEN MODE  RESTRICTED
---------- --------------- ---------- ----------
         4 APP_ROOT        READ WRITE NO
         5 APP_PDB01       READ WRITE NO
         6 APP_ROOT$SEED   MOUNTED    YES

2. アプリケーションの同期(APP_ROOT$SEEDに適用)

2.1 APP_ROOT$SEED を OPEN 状態にする

ALTER PLUGGABLE DATABASE app_root$seed OPEN;

再確認:

SHOW PDBS

出力例:

    CON_ID CON_NAME        OPEN MODE  RESTRICTED
---------- --------------- ---------- ----------
4 APP_ROOT READ WRITE NO
5 APP_PDB01 READ WRITE NO
6 APP_ROOT$SEED READ WRITE NO

2.2 APP_ROOT$SEED に接続

ALTER SESSION SET CONTAINER = app_root$seed;

確認:

SHOW CON_NAME
-- → APP_ROOT$SEED

2.3 アプリケーションの同期

ALTER PLUGGABLE DATABASE APPLICATION sales_app SYNC;

✅ これにより、sales_app バージョン1.0 の内容がAPP_ROOT$SEEDに適用されます。


3. アプリケーションシードの読み取り専用化

3.1 書き込みモードでの操作が完了したので一旦クローズ

ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;

3.2 読み取り専用で再オープン

ALTER PLUGGABLE DATABASE OPEN READ ONLY;

🔒 APP_ROOT$SEED は基本的に読み取り専用状態で保持する必要があります。

SQL> ALTER SESSION SET CONTAINER = app_root;

セッションが変更されました。

SQL> show con_name

CON_NAME
------------------------------
APP_ROOT
SQL> CREATE PLUGGABLE DATABASE AS SEED
2 ADMIN USER app_admin IDENTIFIED BY oracle
3 FILE_NAME_CONVERT = ('/pdbseed/', '/app_seed/');

プラガブル・データベースが作成されました。

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
4 APP_ROOT READ WRITE NO
5 APP_PDB01 READ WRITE NO
6 APP_ROOT$SEED MOUNTED
SQL> ALTER PLUGGABLE DATABASE app_root$seed OPEN;

プラガブル・データベースが変更されました。

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
4 APP_ROOT READ WRITE NO
5 APP_PDB01 READ WRITE NO
6 APP_ROOT$SEED READ WRITE NO
SQL> ALTER SESSION SET CONTAINER = app_root$seed;

セッションが変更されました。

SQL> show con_name

CON_NAME
------------------------------
APP_ROOT$SEED
SQL> ALTER PLUGGABLE DATABASE APPLICATION sales_app SYNC;

プラガブル・データベースが変更されました。

SQL> ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;

プラガブル・データベースが変更されました。

SQL> ALTER PLUGGABLE DATABASE OPEN READ ONLY;

プラガブル・データベースが変更されました。

SQL> ALTER SESSION SET CONTAINER = app_root;

セッションが変更されました。

SQL> show con_name

CON_NAME
------------------------------
APP_ROOT
SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
4 APP_ROOT READ WRITE NO
5 APP_PDB01 READ WRITE NO
6 APP_ROOT$SEED READ ONLY NO

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

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


4. APP_ROOT に戻る

ALTER SESSION SET CONTAINER = app_root;

SHOW CON_NAME;
-- → APP_ROOT

SHOW PDBS;

出力例:

    CON_ID CON_NAME        OPEN MODE  RESTRICTED
---------- --------------- ---------- ----------
4 APP_ROOT READ WRITE NO
5 APP_PDB01 READ WRITE NO
6 APP_ROOT$SEED READ ONLY NO

5. APP_ROOT$SEED を元にアプリケーションPDBを作成

5.1 APP_PDB02 の作成(FROM APP_ROOT$SEED)

CREATE PLUGGABLE DATABASE app_pdb02
FROM app_root$seed
FILE_NAME_CONVERT = ('/app_seed/', '/app_pdb02/');

FROM app_root$seed を使用することで、アプリケーションシードをテンプレートとしてAPP_PDBを迅速に作成できます。

5.2 起動

ALTER PLUGGABLE DATABASE app_pdb02 OPEN;

6. 作成結果の確認

ALTER SESSION SET CONTAINER = app_pdb02;

-- アプリケーションユーザーが継承されているか確認
SELECT username FROM dba_users WHERE username = 'APP_USER';

-- テーブルなども確認可能
SELECT table_name FROM all_tables WHERE owner = 'APP_USER';
SQL> CREATE PLUGGABLE DATABASE app_pdb02
2 FROM app_root$seed
3 FILE_NAME_CONVERT = ('/app_seed/', '/app_pdb02/');

プラガブル・データベースが作成されました。

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
4 APP_ROOT READ WRITE NO
5 APP_PDB01 READ WRITE NO
6 APP_ROOT$SEED READ ONLY NO
7 APP_PDB02 MOUNTED
SQL> ALTER PLUGGABLE DATABASE app_pdb02 OPEN;

プラガブル・データベースが変更されました。

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
4 APP_ROOT READ WRITE NO
5 APP_PDB01 READ WRITE NO
6 APP_ROOT$SEED READ ONLY NO
7 APP_PDB02 READ WRITE NO
SQL> ALTER SESSION SET CONTAINER = app_pdb02;

セッションが変更されました。

SQL> SELECT username FROM dba_users WHERE username = 'APP_USER';

USERNAME
--------------------------------------------------------------------------------
APP_USER

SQL> SELECT table_name FROM all_tables WHERE owner = 'APP_USER';

TABLE_NAME
--------------------------------------------------------------------------------
APP_SALES

📌 テキスト図:構成イメージ

APP_ROOT
├─ sales_app v1.0
├─ APP_ROOT$SEED(同期済・READ ONLY)
└─ app_pdb02(APP_ROOT$SEEDから作成)

✅ まとめ

  • CREATE PLUGGABLE DATABASE AS SEEDAPP_ROOT$SEED を作成
  • APP_ROOT$SEED に対して SYNC を実行しアプリケーションを展開
  • 読み取り専用にしておくことで、テンプレートPDBとして使用可能
  • FROM app_root$seed を使って効率よくAPP_PDBを複製できる


[参考]
Oracle Multitenant 管理者ガイド 19c

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

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

コメント

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