マルチテナント(ALTER SESSION SET CONTAINER)難易度 標準無料
共通ユーザー C##DBA で CDB$ROOT に接続している。同一の物理接続を使い回して、複数の PDB を横断して管理タスクを行いたい。次を実行した。
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> ALTER SESSION SET CONTAINER = salespdb; Session altered.
ALTER SESSION SET CONTAINER の挙動として最も適切なものを選べ。(単一選択)
- A同一の物理接続を維持したまま、カレントコンテナを
SALESPDBへ切り替える。再接続や再認証は不要で、SET CONTAINER権限を持つ共通ユーザーが実行できる - B内部的に
SALESPDBへの新しい接続を張り直し、そのユーザーのパスワードで再認証する必要がある - C
CDB$ROOTから PDB への一方向にしか使えず、PDB からCDB$ROOTへ戻すことはできない - 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 のスキーマ/オブジェクトを対象に解決される。物理接続は一つのまま維持される。
- B
SET 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; でルートへ戻る。
公式ドキュメント・関連Multitenant Administrator's Guide ― Accessing a Container in a CDB(ALTER SESSION SET CONTAINER)↗
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)