本コンテンツはORACLE MASTER Gold DBA 2019(Oracle Database AdministrationⅡ)の試験トピックであるOracle Multitenant Architectureに関する内容をご紹介します。今回は「アプリケーション・コンテナの使用」の問題を解きながら詳しく解説していきます。

————————————————-

それでは問題文を確認していきましょう。

次の構成を確認してください。

・CDB1はコンテナ・データベースです。
・TOYS_ROOTはCDB1に含まれるアプリケーション・ルート・コンテナです。
・アプリケーション・シード・コンテナは作成されていません。

TOYS_ROOTアプリケーション・ルート・コンテナに接続して次のコマンドを実行しました。

SQL> create pluggable database ROBOTS admin user admin identified by oracle_4U
         create_file_dest=’/u01/app/oracle/oradata/CDB1/toyes_root/robots’;

コマンドの実行について正しい内容を選択してください。

尚、create_file_destのパスは正しく指定されているものとします。

1. アプリケーション・シード・コンテナが作成されていないためエラーとなる。
2. アプリケーション・シード・コンテナが作成されていないためROBOTSという名前で通常のPDBとして作成される。
3. TOYS_ROOT配下にROBOTSという名前でアプリケーションPDBが正常に作成される。
4. TOYS_ROOT配下にROBOTSという名前でPDBが作成されるがアプリケーションPDBとして使用するにはアプリケーションのインストール処理が必要になる。
5. アプリケーションPDBを作成する前にTOYS_ROOTコンテナにアプリケーションのインストールが必要のため警告付きで作成が完了する。

アプリケーションPDBを作成する前にTOYS_ROOTコンテナにアプリケーションのインストールが必要のため警告付きで作成が完了する。

(解説)

今回はマルチテナント・アーキテクチャの機能である「アプリケーションコンテナ」について学習をしていきましょう。Oracle DatabaseのアプリケーションコンテナはOracle 12cR2で導入された機能になります。

さて、皆さん、「アプリケーションコンテナ」と聞いて真っ先に思い浮かぶのは何でしょうか?おそらく以下のようなことを想像したのではないかと思います。

  • JAVAアプリなどを管理するアプリケーション・サーバーのこと?
  • コンテナエンジン上でユーザー・プログラムを動作させるのかな?
  • DBサーバー上にアクセスするアプリケーション全般の操作・管理をするの?

一般的にアプリケーションコンテナと聞いたら上記のようにユーザー側のアプリケーション・プログラムを想像するのではないかと思います。しかしマルチテナント・アーキテクチャのアプリケーションコンテナはユーザー・プログラム関連とはまったく異なる機能になります。アプリケーションコンテナには、「アプリケーション・ルート」「アプリケーション・シード」「アプリケーションPDB」と種類がありますが、まずはこれまで学習してきたプラガブル・データベース(PDB)の種類の1つであると考えてください。そしてこのアプリケーションコンテナの特徴を言葉で簡単に説明すると、「共通のアプリケーションを含む、類似したPDBをグループ化したもの」と言えばよいでしょうか。再度、アプリケーションという用語が出てきましたが、このアプリケーションの意味するところは、ユーザー側で操作するアプリケーション・プログラムではなく、ユーザー・アプリケーションが使用するOracle DB内に定義されるオブジェクト(DBユーザーや表など)と置き換えていただくとよいでしょう。つまり、「共通のデータベース・オブジェクト(DBユーザーや表など)を含む、類似したPDBをグループ化したもの」と考えてください。少し分かりやすくなったのではないかと思いますが身近なものに例えてさらに解説していきましょう。「第1回_マルチテナント・アーキテクチャの基礎」で紹介しました「駅ビル」の例で解説していきますので、第1回をまだ確認していない方はそちらの記事を先に見ていただければと思います。

次の図を見てください。第1回で使用した駅ビルの図に「デパ地下」を追加した内容になります。。

私も大好きな「デパ地下」ですが、いろんなお惣菜を取り扱っている店舗があると思います。各店舗は独立しており、それぞれ異なる食品を扱っていると思いますが、お惣菜を販売するという共通目的があって「デパ地下」という1つグループでまとまっていますよね。このイメージをアプリケーションコンテナに置き換えて見てみましょう。次はアプリケーションコンテナの図になります。

アプリケーションコンテナ自体はCDB内のリソースになるのでCDBルートの管理下として作成されます。「デパ地下」も駅ビルの管理ルームで管理されるというイメージですね。アプリケーションコンテナ内に「アプリケーション・ルート」というコンテナがありますが、これはアプリケーションコンテナ全体を管理するコンテナと考えてください。CDBルートと似たような役割を行うコンテナとなり、アプリケーションPDBの作成や、後で説明しますが、アプリケーションのインストールなどを実施します。駅ビルの例なら「デパ地下」のみを管理するサブ管理ルームのようなものがあると考えるといいでしょう。そしてアプリケーションPDBが駅ビルの「デパ地下」にある各店舗(お惣菜屋)に該当するという感じです。アプリケーションPDBは類似した構造(ここではお惣菜を売る)がある1つのグループでまとめられるということですね。

このようにアプリケーションコンテナを構築するとアプリケーション・ルート配下に類似性のあるPDBをアプリケーションPDBとしてグループ化して管理することができます。そしてアプリケーション・ルートにはアプリケーションPDBが共有して使用できる「アプリケーション共通オブジェクト」を作成することができ、この操作のことをアプリケーションをインストールすると言います。ここでいうアプリケーションというのは先の文章でも説明したとおりデータベース・オブジェクトであると考えてください。アプリケーション・ルートにアプリケーションをインストールし、「同期処理」を行うことで各アプリケーションPDBで共通オブジェクトとして使用することができます。

どのような場合に共通オブジェクトを使用するか?ですが、ここでも「デパ地下」の例で考えてみたいと思います。「デパ地下」のグループ全体の売上げの集計を行う場合を想定してみてください。各店舗間でバラバラの表定義を使っていたり、共通のログインユーザーが存在していなかったりする場合、集計処理が困難になることが想像できます。ユーザーや集計データを扱う表定義が各店舗で共有して使用できれば集計作業が楽になりそうですよね。このような場合にアプリケーションコンテナを使用して「アプリケーション共通オブジェクト」の定義(アプリケーションのインストール)を行うことによってオブジェクトの共有が実現可能になります。尚、アプリケーションのインストールについては次回の「第8回:アプリケーション・コンテナへのアプリケーション・インストール」で詳しく解説しますのでそちらも是非ご確認ください。

最後にアプリケーション・シードですが、これはCDBシードと同じようにアプリケーションPDBを新規作成する際のテンプレートとしての役割になります。ただしCDBシードとは異なり作成自体は必須ではありません。

ここまで確認ができましたら正解の選択肢を選ぶことができるので再度問題を確認していきましょう。

 

選択肢1は誤りです。アプリケーション・シードの作成は任意なのでエラーになることはありません。

選択肢2も誤りです。アプリケーション・シードが作成されていなくても、アプリケーション・ルートからPDBの作成を行えばアプリケーションPDBとして作成されます。

選択肢3が正しい内容になりますね。

選択肢4と選択肢5についてはアプリケーションのインストールに関する内容が記載されていますが、どちらも誤った内容になります。アプリケーションPDBの作成において事前にアプリケーションのインストールは必須ではありません。

以上を踏まえまして正解は 3 になります。

今回はアプリケーションコンテナの問題を扱ってきましたが最後に「アプリケーション・ルート」「アプリケーション・シード」「アプリケーションPDB」を作成した実際の操作ログを載せておきましょう。参考にしていただければと思います。

 

※必要なディレクトリは事前に作成済みです

SQL> show con_name  ※現在のコンテナがCDBルートであることを確認

CON_NAME
——————————
CDB$ROOT

SQL> create pluggable database toys_root as application container 
         admin user app_admin identified by oracle_4U 
         roles=(connect) create_file_dest=’/u02/app/oracle/oradata/ORCL/toys_root’;  
         ※アプリケーション・ルート(TOYS_ROOT)を作成

Pluggable database created.

SQL> alter pluggable database toys_root open;  ※アプリケーション・ルートのOPEN処理

Pluggable database altered.

SQL> alter session set container=toys_root;  ※アプリケーション・ルートにセッション切り替え

Session altered.

SQL> create pluggable database as seed 
         admin user admin identified by oracle_4U 
         roles=(connect) create_file_dest=’/u02/app/oracle/oradata/ORCL/toys_root/toys_SEED’;  
         ※アプリケーション・シードを作成

Pluggable database created.

SQL> create pluggable database robots 
         admin user admin identified by oracle_4U
         create_file_dest=’/u02/app/oracle/oradata/ORCL/toys_root/robots’; 
         ※アプリケーションPDB(ROBOTS)を作成

Pluggable database created.

SQL> alter pluggable database all open;  ※アプリケーション・ルートからすべての
                                                               アプリケーションPDBのOPEN処理
Pluggable database altered.

SQL> connect / as sysdba  ※CDBルートに接続
Connected.

SQL> show pdbs

CON_ID  CON_NAME               OPEN MODE   RESTRICTED
——— ———————— ————— —————
         2   PDB$SEED                READ ONLY    NO
         3   PDB1                        READ WRITE  NO
         4   TOYS_ROOT              READ WRITE  NO
         5   TOYS_ROOT$SEED    READ WRITE   NO
         6   ROBOTS                   READ WRITE   NO

SQL> select name, con_id, 
         application_root “APP_ROOT”,  ※PDBがアプリケーション・ルートであるかどうか
         application_seed “APP_SEED”,  ※PDBがアプリケーション・シードであるかどうか
         application_pdb “APP_PDB”,    ※PDBがアプリケーションPDBであるかどうか
         application_root_con_id       ※アプリケーションPDBが所属するコンテナID情報
         from v$containers;

NAME               CON_ID  APP_ROOT  APP_SEED  APP_PDB  APPLICATION_ROOT_CON_ID
————————— ————- ————- ———– ———————————- 
CDB$ROOT                1  NO              NO              NO
PDB$SEED                 2  NO              NO              NO
PDB1                         3  NO              NO              NO
TOYS_ROOT               4  YES             NO              NO
TOYS_ROOT$SEED      5  YES            YES            YES                                                 4
ROBOTS                     6  NO              NO             YES                                                 4

6 rows selected.

アプリケーションコンテナについて今回は駅ビル内の「デパ地下」という身近な物に例えて解説させていただきました。もっと分かりやすい例えがあれば皆さんのほうでも工夫して考えてみるといいでしょう。「営業グループ部門の第1営業課、第2営業課…」 といった感じでもよいかと思います。それでは今回の講義はこれまでとします。お疲れ様でした。

————————————————-

【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧

————————————————-

その他の ORACLE MASTER 試験トピック解説講座シリーズ:

【Oracle University 講師による ORACLE MASTER Silver SQL 2019 試験トピック解説講座】-トピック一覧-

————————————————-