本コンテンツはORACLE MASTER Gold DBA 2019(Oracle Database AdministrationⅡ)の試験トピックであるOracle Multitenant Architectureに関する内容をご紹介します。今回は「アプリケーション・コンテナへのアプリケーション・インストール」の問題を解きながら詳しく解説していきます。
————————————————-
それでは問題文を確認していきましょう。
次の構成を確認してください。
• CDB1はコンテナ・データベースです。• TOYS_ROOTはCDB1に含まれるアプリケーション・ルート・コンテナです。
• TOYS_ROOT配下にROBOTS, DOLLSアプリケーションPDBが作成されています。
• アプリケーションコンテナのPDBはすべてOPENしています。
TOYS_ROOTアプリケーション・ルート・コンテナに接続して次のコマンドを実行しました。
SQL> create user APP_U1 identified by oracle_4U;
SQL> alter pluggable database application APP_AP1 begin install ‘1.0’;
SQL> create user APP_U2 identified by oracle_4U;
SQL> alter pluggable database application APP_AP1 end install ‘1.0’;
コマンドの結果として正しい内容を述べているものはどれですか(2つ選択してください)。
尚、コマンドはすべて正常に実行されたものとします。
1. ROBOTS, DOLLSにAPP_U2ユーザーのみ作成されています。
2. ROBOTS, DOLLSにAPP_U1ユーザーのみ作成されています。
3. ROBOTS, DOLLSにAPP_U1ユーザーおよびAPP_U2ユーザーが作成されています。
4. ROBOTS, DOLLSにAPP_U1ユーザーおよびAPP_U2ユーザーは作成されていません。
5. TOYS_ROOTにAPP_U1ユーザーのみ作成されています。
6. TOYS_ROOTにAPP_U1ユーザーおよびAPP_U2ユーザーが作成されています。
(解説)
今回はアプリケーションコンテナへの「アプリケーションのインストール」について学習をしていきましょう。アプリケーションコンテナについての説明は「第7回:アプリケーション・コンテナの使用」で解説していますのでアプリケーションコンテナをまだよく理解していない方は第7回の内容を先にご確認ください。
第7回でも解説しましたが、ここで扱う「アプリケーション」というのはユーザー側が使用するアプリケーション・プログラムではなくOracle Database内に定義するオブジェクトのことを指すと考えてください。このオブジェクトのことを「アプリケーション共通オブジェクト」と言い、同期処理を行うことでアプリケーションPDBで共有して使用が可能になります。まずは第7回でも紹介したアプリケーションのインストールのイメージ図を以下に乗せておきましょう。
まず初めにアプリケーションのインストール処理はアプリケーション・ルートに対して行います。その後、「同期処理」を行うことでインストールした共通オブジェクトをアプリケーションPDBで使用可能となります。インストール&同期処理の一連の流れを以下で確認しておきましょう。
- アプリケーション・ルートに接続する
- アプリケーションのインストール開始宣言(BEGIN INSTALL)
- アプリケーションのインストール
- アプリケーションのインストール終了宣言(END INSTALL)
- アプリケーションPDBでのアプリケーションの同期処理
手順1~5の操作方法の詳細も確認するために、実機の操作ログをこの後記載します。今回、実機操作で使用したアプリケーションコンテナは問題文に沿ったリソース名で作成しました。またインストールするアプリケーションの内容は以下のスクリプト「script_toys_app.sql」に記載されているSQL文を実行することとします。
スクリプト:script_toys_app.sql
create tablespace toys_tbs datafile size 100M autoextend on next 10M maxsize 200M;
create user toys_owner1 identified by oracle_4U container=all;
grant create session, dba to toys_owner1;
alter user toys_owner1 default tablespace toys_tbs;
create table toys_owner1.sales_data1 sharing=metadata
(year number(4),
region varchar2(10),
quarter varchar2(4),
revenue number)
それでは内容を見ていきましょう。
SQL> show con_name ※現在のコンテナがCDBルートであることを確認
CON_NAME
——————————
CDB$ROOT
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 ※アプリケーションPDB
7 DOLLS READ WRITE NO ※アプリケーションPDB
SQL> alter session set container=toys_root; ※アプリケーション・ルートにセッション切り替え
Session altered.
SQL> alter pluggable database application toys_app1 begin install ‘1.0’;
※アプリケーションのインストール開始宣言
アプリケーション名はTOYS_APP1
アプリケーションのバージョンは1.0 (任意のバージョン番号で管理可能)
Pluggable database altered.
SQL> select app_name, app_version, app_status from dba_applications
where app_name=’TOYS_APP1′; ※dba_applicationsでアプリケーションの状態を確認
APP_NAME APP_VERS APP_STATUS
————— —————- ——————–
TOYS_APP1 INSTALLING
SQL> @/home/oracle/scripts/script_toys_app.sql ※スクリプト内のSQL文を実行
SQL> create tablespace toys_tbs datafile size 100M autoextend on next 10M maxsize 200M;
Tablespace created.
SQL> create user toys_owner1 identified by oracle_4U container=all;
User created.
SQL> grant create session, dba to toys_owner1;
Grant succeeded.
SQL> alter user toys_owner1 default tablespace toys_tbs;
User altered.
SQL> create table toys_owner1.sales_data1 sharing=metadata
2 (year number(4),
3 region varchar2(10),
4 quarter varchar2(4),
5 revenue number);
Table created.
SQL> alter pluggable database application toys_app1 end install ‘1.0’;
※アプリケーションのインストール終了宣言
アプリケーション名はTOYS_APP1
アプリケーションのバージョンは1.0 (任意のバージョン番号で管理可能)
Pluggable database altered.
SQL> select app_name, app_version, app_status from dba_applications
where app_name=’TOYS_APP1′; ※dba_applicationsでアプリケーションの状態を確認
APP_NAME APP_VERS APP_STATUS
————— —————- ——————–
TOYS_APP1 1.0 NORMAL
==== ここからはアプリケーションPDB(ROBOTS)への同期処理 ====
SQL> alter session set container=robots; ※アプリケーションPDB(ROBOTS)にセッション切り替え
Session altered.
SQL> alter pluggable database application toys_app1 sync;
※ROBOTSアプリケーションPDBにて同期処理を実施。
これによりアプリーケーション・ルートにインストールしてあるTOYS_OWNER1ユーザーや
SALES_DATA1表などがROBOTSアプリケーションPDBで使用可能になる
Pluggable database altered.
SQL> connect toys_owner1/oracle_4U@localhost:1521/robots
※TOYS_OWNER1ユーザーでROBOTSアプリケーションPDBに接続
Connected.
SQL> show user ※TOYS_OWNER1で接続していることを確認
USER is “TOYS_OWNER1”
SQL> show con_name ※ROBOTSアプリケーションPDBに接続していることを確認
CON_NAME
——————————
ROBOTS
SQL> describe sales_data1 ※TOYS_OWNER1のSALES_DATA1表があることを確認
Name Null? Type
———————————- ——– ———————–
YEAR NUMBER(4)
REGION VARCHAR2(10)
QUARTER VARCHAR2(4)
REVENUE NUMBER
ここまでがアプリケーション・ルートにアプリケーションをインストールして、ROBOTSという名前のアプリケーションPDBに同期処理を実行した内容です。アプリケーション・ルートにインストールしたオブジェクトが同期処理によって問題なくアプリケーションPDBで使用できていることが確認できると思います。
上記内容で同期処理を実施したのはROBOTSというアプリケーションPDBになりますが、DOLLSというアプリケーションPDBも存在しています。こちらについてはどうなっているでしょうか?同期されている?されていない?の確認を実機操作にてさらに確認していきましょう。
SQL> show con_name ※現在のセッションはROBOTSアプリケーションPDBに接続している
CON_NAME
——————————
ROBOTS
SQL> connect toys_owner1/oracle_4U@localhost:1521/dolls
※アプリケーションPDBであるDOLLSにTOYS_OWNER1で接続しようとしても・・
ERROR:
ORA-01017: invalid username/password; logon denied ※エラーが発生して接続できない。
Warning: You are no longer connected to ORACLE.
SQL> connect sys/Welcome_1@localhost:1521/toys_root as sysdba ※アプリケーション・ルートに接続
Connected.
SQL> select p.pdb_name, u.username, u.common from cdb_pdbs p, cdb_users u
where p.con_id=u.con_id and u.username=’TOYS_OWNER1′
※アプリケーションコンテナ内でTOYS_OWNER1が定義されているコンテナ情報の確認
PDB_NAME USERNAME COMMON
——————– ———————- ——–
TOYS_ROOT TOYS_OWNER1 YES
ROBOTS TOYS_OWNER1 YES
※同期処理をしたROBOTSにはTOYS_OWNER1ユーザーは存在するがDOLLSには存在しない
予測できた方もいらっしゃると思いますが、DOLLSという名前のアプリケーションPDBについては、まだ同期処理をしていないのでTOYS_OWNER1ユーザーやSALES_DATA1表などのオブジェクトは使用することができません。アプリケーション・ルートにインストールした共通オブジェクトを使用するためにはDOLLSアプリケーションPDBに接続して同期処理を行う必要があります。ではその操作を実施してみましょう。
SQL> show user ※現在のセッションはSYSでアプリケーション・ルート接続している
USER is “SYS”
SQL> show con_name
CON_NAME
——————————
TOYS_ROOT
SQL> alter session set container=dolls; ※アプリケーションPDB(DOLLS)にセッション切り替え
Session altered.
SQL> alter pluggable database application toys_app1 sync;
※DOLLSアプリケーションPDBにて同期処理を実施。
これによりアプリーケーション・ルートにインストールしてあるTOYS_OWNER1ユーザーや
SALES_DATA1表などがDOLLSアプリケーションPDBで使用可能になる
Pluggable database altered.
SQL> connect toys_owner1/oracle_4U@localhost:1521/dolls
※TOYS_OWNER1ユーザーでDOLLSアプリケーションPDBに接続
Connected.
SQL> show user ※TOYS_OWNER1で接続していることを確認
USER is “TOYS_OWNER1”
SQL> show con_name ※DOLLSアプリケーションPDBに接続していることを確認
CON_NAME
——————————
DOLLS
SQL> describe sales_data1 ※TOYS_OWNER1のSALES_DATA1表があることを確認
Name Null? Type
———————————- ——– ———————–
YEAR NUMBER(4)
REGION VARCHAR2(10)
QUARTER VARCHAR2(4)
REVENUE NUMBER
DOLLSアプリケーションPDBで同期処理を行うことにより無事に共通オブジェクトが使用できるようになりました。以上がアプリケーションのインストールから同期処理までの詳細な操作方法になります。尚、今回はすでに作成済みのアプリケーションPDBに対して同期処理を行いましたが、アプリケーション・シードを使用した方法もあります。簡単に操作方法の流れを以下に記載しておきます。
「アプリケーション・ルートにアプリケーションをインストール」
↓
「アプリケーション・シードに同期処理」
↓
「アプリケーション・シードからアプリケーションPDBを新規作成」
こちらの内容も合わせておさえておきましょう。
それでは今回の問題をあらためて確認したいと思います。問題文に書いてある操作はアプリケーション・ルートにてユーザーの作成やアプリケーションのインストールの開始宣言、終了宣言を行っていますがアプリケーションPDBに対して同期処理を行っていません。それを踏まえて選択肢をみていけば正解を選ぶことができそうですね。
選択肢1は誤りです。アプリケーションのインストール開始と終了宣言の間にAPP_U2を作成していますが、アプリケーションPDBで同期処理をしてないのでROBOTS、DOLLSともにAPP_U2ユーザーは使用できません。
選択肢2は誤りです。APP_U1ユーザーはアプリケーション・ルートにのみ存在するユーザーとして作成されます。仮に同期処理をしたとしてもアプリケーションの開始宣言前にユーザー作成を実行しているのでアプリケーションPDBに反映はされません。
選択肢3も誤りですね。選択肢1と選択肢2の説明内容で理解できると思います。
選択肢4は正しい内容になります。
選択肢5は誤りで、選択肢6が正しい内容になります。TOYS_ROOTにはAPP_U1ユーザーとAPP_U2ユーザーが存在している状態です。同期処理を行えばAPP_U2ユーザーがアプリケーションPDBで共通オブジェクトとして共有して使用することが可能になります。
以上を踏まえまして正解は 4、6 になります。
今回はアプリケーションのインストールについて実機の操作ログを踏まえて解説させていただきました。かなり操作ログの内容が多かったですが、理解が難しかった方、よく理解できた方も是非自分で実機操作を行って再確認をしてみてください。技術知識の定着に加え、疑問に思ったことなどを実機操作にて確認するという癖をつけていただくと飛躍的にレベルアップすることが可能になるかと思います。
それでは今回の講義はこれまでとします。お疲れ様でした。
————————————————-
【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧
————————————————-
その他の ORACLE MASTER 試験トピック解説講座シリーズ:
【Oracle University 講師による ORACLE MASTER Silver SQL 2019 試験トピック解説講座】-トピック一覧-
————————————————-
