Oracle アプリケーション・コンテナでアプリケーションを作成する方法

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

~公式構文でのインストール処理/CREATE USER 付き~

Oracle Multitenant構成において提供されているアプリケーション・コンテナ(Application Container)は、アプリケーション定義をAPP_ROOTで集中管理し、アプリケーションPDB(APP_PDB)へ効率よく展開するための機能です。

本記事では、APP_ROOT内でアプリケーションを作成・定義する手順を、CREATE USER を含めて丁寧に解説します。
※アプリケーションPDBの作成や同期方法は本記事では扱いません。

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

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


✅ この記事で学べること

  • アプリケーション定義の正しい手順(BEGIN INSTALL~END INSTALL)
  • CREATE USER の定義を含めたアプリケーション登録方法
  • DBMS_PDB.INSTALL_APP を使わない、Oracle公式推奨構文のみによるアプリ定義

1. 前提条件

項目内容
バージョンOracle Database 12.2以降
環境CDB + アプリケーション・コンテナ構成
権限SYSDBA またはAPP_ROOTの管理者ユーザー
APP_ROOT作成済かつOPEN状態であること

2. アプリケーション定義の構成

アプリケーションは次のように、Oracle内部でバージョン管理された一連の定義として扱われます。

APP_ROOT
└─ BEGIN INSTALL '1.0'
├─ CREATE USER
├─ GRANT 権限
├─ CREATE TABLE
├─ CREATE VIEW
END INSTALL

3. APP_ROOTに接続

-- APP_ROOTへ切り替え
ALTER SESSION SET CONTAINER = app_root;

-- 現在のコンテナ確認
SHOW CON_NAME;
-- → APP_ROOT

4. アプリケーションのインストール開始

ALTER PLUGGABLE DATABASE APPLICATION sales_app BEGIN INSTALL '1.0';
パラメータ意味
sales_appアプリケーション名(任意)
'1.0'バージョン名(任意)

5. アプリケーションオブジェクトの定義(CREATE USER付き)

① ユーザー作成と権限付与

CREATE USER app_user IDENTIFIED BY oracle;

GRANT CREATE SESSION, RESOURCE, UNLIMITED TABLESPACE TO app_user;

🔍 RESOURCEロールとは?
テーブルやインデックスなどのスキーマ・オブジェクトを作成可能にするロールです。

🔍 UNLIMITED TABLESPACEとは?
表領域の割当制限を無制限にします。通常、PDB配下でも使用されます。

② テーブル作成

CREATE TABLE app_user.app_sales (
sale_id NUMBER PRIMARY KEY,
product VARCHAR2(100),
amount NUMBER,
sale_date DATE
);

③ ビュー作成

CREATE VIEW app_user.app_sales_summary AS
SELECT product, SUM(amount) AS total_amount
FROM app_user.app_sales
GROUP BY product;

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

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


6. アプリケーションのインストール終了

ALTER PLUGGABLE DATABASE APPLICATION sales_app END INSTALL;

これにより、sales_app バージョン1.0のアプリケーションとしてOracleに登録され、以降アプリケーションPDBで同期・配布できるようになります。


7. アプリケーションの登録確認

SELECT app_name, app_version, install_time
FROM dba_applications;

出力例:

APP_NAME   APP_VERSION   INSTALL_TIME
--------- ------------ ---------------------
SALES_APP 1.0 2025-05-18 17:32:10
SQL> ALTER SESSION SET CONTAINER = app_root;

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

SQL> SHOW CON_NAME

CON_NAME
------------------------------
APP_ROOT
SQL> ALTER PLUGGABLE DATABASE APPLICATION sales_app BEGIN INSTALL '1.0';

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

SQL> CREATE USER app_user IDENTIFIED BY oracle;

ユーザーが作成されました。

SQL> GRANT CREATE SESSION, RESOURCE, UNLIMITED TABLESPACE TO app_user;

権限付与が成功しました。

SQL> CREATE TABLE app_user.app_sales (
2 sale_id NUMBER PRIMARY KEY,
3 product VARCHAR2(100),
4 amount NUMBER,
5 sale_date DATE
6 );

表が作成されました。

SQL> CREATE VIEW app_user.app_sales_summary AS
2 SELECT product, SUM(amount) AS total_amount
3 FROM app_user.app_sales
4 GROUP BY product;

ビューが作成されました。

SQL> ALTER PLUGGABLE DATABASE APPLICATION sales_app END INSTALL;

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

SQL> col app_name for a20
SQL> col app_version for a20
SQL> SELECT app_name, app_version FROM dba_applications
2 WHERE app_name = 'SALES_APP';

APP_NAME APP_VERSION
-------------------- --------------------
SALES_APP 1.0

🔍 補足:DBMS_PDB.INSTALL_APPはなぜ使わないのか?

Oracle Database 12.2以降では、ALTER PLUGGABLE DATABASE APPLICATION 構文のみでアプリケーションの作成とバージョン管理が完結します。
DBMS_PDB.INSTALL_APP は12.1時代の方式であり、以降のバージョンでは不要・非推奨です。


📌 テキスト図:全体フロー

APP_ROOT
├─ ALTER PLUGGABLE DATABASE APPLICATION sales_app BEGIN INSTALL '1.0'
│ ├─ CREATE USER app_user IDENTIFIED BY oracle
│ ├─ GRANT CREATE SESSION, RESOURCE, UNLIMITED TABLESPACE TO app_user
│ ├─ CREATE TABLE app_user.app_sales ...
│ └─ CREATE VIEW app_user.app_sales_summary ...
└─ ALTER PLUGGABLE DATABASE APPLICATION sales_app END INSTALL

✅ まとめ

  • アプリケーションの定義は、BEGIN INSTALLEND INSTALL の間で記述
  • CREATE USER を含めて構成できるため、スキーマ単位でのアプリ管理が可能
  • 必要な権限は CREATE SESSION + RESOURCE + UNLIMITED TABLESPACE
  • DBMS_PDB.INSTALL_APP は不要(12.2以降では標準構文ではない)


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

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

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

コメント

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