AI作成・独立検証済(有資格者監修なし)1Z0-083 対応
マルチテナント(ALTER SESSION SET CONTAINER)難易度 標準無料

共通ユーザー C##DBACDB$ROOT に接続している。同一の物理接続を使い回して、複数の PDB を横断して管理タスクを行いたい。次を実行した。

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

SQL> ALTER SESSION SET CONTAINER = salespdb;
Session altered.

ALTER SESSION SET CONTAINER の挙動として最も適切なものを選べ。(単一選択)

  1. A同一の物理接続を維持したまま、カレントコンテナを SALESPDB へ切り替える。再接続や再認証は不要で、SET CONTAINER 権限を持つ共通ユーザーが実行できる
  2. B内部的に SALESPDB への新しい接続を張り直し、そのユーザーのパスワードで再認証する必要がある
  3. CCDB$ROOT から PDB への一方向にしか使えず、PDB から CDB$ROOT へ戻すことはできない
  4. Dローカルユーザーでのみ実行可能で、共通ユーザーは CONNECT ... @pdb のサービス経由でしか PDB に入れない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

ALTER SESSION SET CONTAINER = <pdb> は、いま張っている接続(セッション)を切らずに、カレントコンテナだけを対象 PDB へ切り替える文である。 新しい接続を張り直したり、再認証(パスワード再入力)したりする必要はない。接続プールが多数の PDB を効率よく捌くための中核機能である。

実行できるのは、対象コンテナへの SET CONTAINER システム権限を持つユーザー(典型的には共通ユーザー)である。 CDB$ROOT ⇄ 各 PDB のどちらの向きにも切り替えられ、ALTER SESSION SET CONTAINER = CDB$ROOT; でルートへ戻せる。

切り替え後は、その PDB がカレントとなり、以後の SQL はその PDB のスキーマ/オブジェクトを対象に解決される。物理接続は一つのまま維持される。

各誤答が違う理由
  • BSET CONTAINER接続を張り直さないのが本質。既存セッションのカレントコンテナを付け替えるだけで、再認証も発生しない。
  • C双方向に切り替え可能。ALTER SESSION SET CONTAINER = CDB$ROOT; でルートへ戻せるし、PDB 間の切り替えもできる(権限があれば)。
  • D逆で、SET CONTAINER はコンテナを横断できる共通ユーザー向けの機能。ローカルユーザーは自分の PDB に閉じるため、他コンテナへの SET CONTAINER はできない。
ひっかけ: 「PDB を変える=接続し直し/再ログインが要る」という思い込み。SET CONTAINER の眼目は同一接続のままコンテナだけ切り替える点にある。 また「root からしか(あるいは PDB からは)切り替えられない」という一方向の誤解も罠で、実際は双方向に切り替えられる(権限次第)。
コマンド例と想定される挙動(未実行)
ALTER SESSION SET CONTAINER = salespdb; → "Session altered."(新規接続は張られない)
SHOW CON_NAME で SALESPDB を返す。ALTER SESSION SET CONTAINER = CDB$ROOT; でルートへ戻る。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
マルチテナント を含む問題を分野別に演習できます。
演習する →