マルチテナント(アプリケーションコンテナ)難易度 高無料
アプリケーションコンテナのアプリケーションルート(APPROOT)で、共通の表構造を持つアプリケーション HR_APP をバージョン 2.0 へアップグレードした。アプリケーション PDB は HRPDB1・HRPDB2 の2つがある。
-- アプリケーションルート APPROOT に接続して実行 SQL> ALTER PLUGGABLE DATABASE APPLICATION hr_app 2 BEGIN UPGRADE '1.0' TO '2.0'; SQL> ... (新しい共通表 / 列 / シードデータの定義を実行) ... SQL> ALTER PLUGGABLE DATABASE APPLICATION hr_app END UPGRADE; Pluggable database altered.
この END UPGRADE 完了後、各アプリケーション PDB(HRPDB1 / HRPDB2)でアプリケーションの変更を反映させるために必要な操作として、最も適切なものを選べ。(単一選択)
- Aアプリケーションルートでアップグレードを完了した時点で、すべてのアプリケーション PDB に変更は自動的に反映されているため、追加操作は不要
- B各アプリケーション PDB に接続し、
ALTER PLUGGABLE DATABASE APPLICATION hr_app SYNC;を実行する - C各アプリケーション PDB を
CLOSE→OPENし直せば、再オープン時に自動で同期される - Dアプリケーションルートで
ALTER PLUGGABLE DATABASE APPLICATION hr_app SYNC ALL PDBS;を1回実行すれば、全アプリケーション PDB が一括同期される
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B✓Gold監修
解説
アプリケーションコンテナでは、アプリケーションルートでアプリケーションのインストール/アップグレード/パッチを行い(BEGIN INSTALL/UPGRADE/PATCH 〜 END ... で囲む)、
その変更は各アプリケーション PDB で明示的に「同期(SYNC)」して初めて適用される。
同期は各アプリケーション PDB に接続して ALTER PLUGGABLE DATABASE APPLICATION hr_app SYNC; を実行する。
これによりその PDB が、ルートに記録されたアプリケーションの最新バージョン(ここでは 2.0)まで共通オブジェクト定義・シードデータを取り込む。
言い換えると、ルートでの END UPGRADE は「ルート側の正本を更新した」だけであり、各 PDB は SYNC するまで旧バージョンのまま動き続ける(段階的ロールアウトが可能)。
- A自動反映されない。ルートのアップグレードと各 PDB への適用は分離されており、
SYNCが必須。 - C
CLOSE/OPENでは同期されない。再オープンはアプリケーションの同期トリガーにはならない(必要なのはAPPLICATION ... SYNC)。 - D
SYNC ALL PDBSのような「ルートから全 PDB を一括同期する」構文は標準の同期手段ではない。同期は各アプリケーション PDB 側でAPPLICATION ... SYNCを実行するのが基本(コンテナ全体へ文を送るCONTAINERS/一括実行は別概念で、本問の正規解ではない)。
ひっかけ: 「ルートで終われば全 PDB に行き渡る(A)」という中央集権の思い込み。実際はルートで定義 → 各 PDB で SYNC して適用の二段構え。
これにより PDB ごとにアップグレード適用のタイミングをずらせる(=可用性管理)。
SYNC を実行する場所が「ルート」か「各 PDB」かの取り違え(B vs D)も狙い。公式ドキュメント・関連Administrator's Guide ― Administering Application Containers(BEGIN/END UPGRADE と各アプリ PDB の SYNC)↗
✓Gold 保有者による書き下ろし解説・実機で検証済