~APP_ROOT$SEEDを活用した効率的なアプリケーションPDB展開~
Oracle Database 12.2以降のMultitenant構成において、アプリケーション・コンテナ(APP_ROOT)の配下でアプリケーションを複数のPDBに展開する際、アプリケーションシード(APP_ROOT$SEED)を使うことで作業効率が飛躍的に向上します。
本記事では以下の手順を詳しく解説します:
- アプリケーションシード(APP_ROOT$SEED)の作成と同期
- 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 SEEDでAPP_ROOT$SEEDを作成APP_ROOT$SEEDに対してSYNCを実行しアプリケーションを展開- 読み取り専用にしておくことで、テンプレートPDBとして使用可能
FROM app_root$seedを使って効率よくAPP_PDBを複製できる
[参考]
Oracle Multitenant 管理者ガイド 19c




コメント