ablog

不器用で落着きのない技術者のメモ

Oracle Database 12.2 で create user すると ORA-65096 が発生する

Oracle Database 12.2 で create user すると ORA-65096 が発生する。

事象

  • Oracle Database 12.2 で create user すると ORA-65096 が発生する。
$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sun Aug 23 16:03:13 2020

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> create user scott identified by tiger
default tablespace users
temporary tablespace temp
quota unlimited on users;  2    3    4
create user scott identified by tiger
            *
ERROR at line 1:
ORA-65096: invalid common user or role name

原因

  • ルートコンテナにローカルユーザーを作成しようとしているため。

ルートコンテナにローカルユーザーを作成しようとした場合に発生するエラーです。 ルートコンテナには共有ユーザー(common user) と呼ばれる特殊なユーザーしか作成することはできません。マルチテナントアーキテクチャにおけるローカルユーザーは、従来のアーキテクチャにおける通常のユーザーと同等のものと考えてください。 Oracle Database 12c R1からマルチテナントアーキテクチャと呼ばれる新しいアーキテクチャが導入されました。 マルチテナントアーキテクチャでは、単一のインスタンス内に複数のデータベースを配置することができます。マルチテナントアーキテクチャにおける個々のデータベースをプラガブルデータベース(PDB)と呼びます。マルチテナントアーキテクチャにただ1つ存在する管理用のデータベースとしてマルチテナントコンテナデータベース(CDB)が存在します。マルチテナントコンテナデータベースをルートコンテナと呼ぶ場合もあります。

ORA-65096: 共通ユーザーまたはロール名が無効です | 技術情報 | 株式会社コーソル

解決策

  • 接続しているデータベースを確認
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
  • PDBの名前と現在のOPEN_MODEを確認
SQL> select name, open_mode from v$pdbs;

NAME
--------------------------------------------------------------------------------
OPEN_MODE
----------
PDB$SEED
READ ONLY

PDB1
READ WRITE
  • PDB に接続
SQL> alter session set container = pdb1;

Session altered.
  • PDB をオープン
SQL> alter pluggable database pdb1 open;

Pluggable database altered.
  • ユーザー作成
SQL> create user scott identified by tiger
default tablespace users
temporary tablespace temp
quota unlimited on users;
  2    3    4
User created.

SQL> grant dba to scott;

Grant succeeded.