対策する資格
Java Silver ・ 近日ORACLE Silver ・ 近日
Gold 保有者 監修1Z0-083 対応
マルチテナント(共通ユーザー)難易度 標準無料

パラメータ COMMON_USER_PREFIX は既定値(C##)のまま、CDB$ROOTSYSDBA で接続している。次の文を順に実行したとき、結果として正しいものを選べ。

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

SQL> CREATE USER hr_admin IDENTIFIED BY pw CONTAINER=ALL;   -- 文(1)
SQL> CREATE USER c##ops   IDENTIFIED BY pw CONTAINER=ALL;   -- 文(2)
  1. A文(1)・文(2) ともに成功する
  2. B文(1) は ORA-65096 で失敗し、文(2) は成功する
  3. C文(1) は成功し、文(2) は「プレフィックスが不正」で失敗する
  4. D文(1)・文(2) ともに失敗する(CONTAINER=ALL は root では使えない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:BGold監修

解説

マルチテナント環境では、CDB$ROOTCONTAINER=ALL(または root 接続時の既定)として作る 共通ユーザー(common user)の名前は、COMMON_USER_PREFIX で定義されたプレフィックスで始まらなければならない。 既定値は C## である。

文(1) の hr_adminC## で始まらないため、共通ユーザーとして作成できず失敗する。 文(2) の c##opsC##(大文字小文字は不問)で始まるため有効な共通ユーザー名として成功する。

なお、プレフィックス規則が課されるのは共通ユーザーのみ。特定の PDB に接続して CONTAINER=CURRENT で作るローカルユーザーには C## プレフィックスは不要(むしろ付けてはならない)。

各誤答が違う理由
  • A文(1) は C## プレフィックスを欠くため成功しない。両方成功はあり得ない。
  • C正誤が逆。c##ops は正しいプレフィックスを持つので失敗するのは文(1) の方。
  • Droot で CONTAINER=ALL を使うのは共通ユーザー作成の正規手段であり、それ自体はエラーではない。
ひっかけ:C## は大文字でないとダメ」と思い込む。プレフィックス照合は大文字小文字を区別しない(c## でも可)。 また「root だから CONTAINER=ALL が要らない/使えない」という思い込み。root では CONTAINER 既定が ALL だが明示も可。
実機確認の答え合わせ
ORA-65096: 共通ユーザー名またはロール名が無効です。
(英語:ORA-65096: invalid common user or role name)
Gold 保有者による書き下ろし解説・実機で検証済
この分野をもっと解いて、得点源に
マルチテナント を含む全問を分野別に演習できます(無料)。
演習する →