Oracleのインストール後にSQL*Plusなどでユーザー作成しようとした際、「ORA-65096」エラーが発生した場合の原因と対応方法についてメモしておきます。
「ORA-65096:共通ユーザーまたはロール名が無効です」の原因
- ルートコンテナにローカルユーザーを作成しようとした場合に発生するエラーとなります。
 ルートコンテナには共有ユーザー(common user) と呼ばれる特殊なユーザーしか作成することはできません。
 Oracle 11gまでと違いOracle 12c以降からは一つのインスタンスには一つのコンテナ・データベース(CDB)と、プラガブル・データベース(PDB)と呼ばれる子DBが存在しています。sysなどのユーザーでログイン直後はコンテナ・データベース(CDB)に接続されている状態となっているため、そのままローカルユーザーを作成しようとしてもエラーが発生してしまうということになります。
「ORA-65096:共通ユーザーまたはロール名が無効です」の対処方法
原因が分かってしまえば対応はシンプルです。接続先がコンテナ・データベース(CDB)であるのがまずいのであればプラガブル・データベース(PDB)に変更してしまえばいいだけです。
- まずは「show con_name;」で現在接続されているデータベースを確認します。
- 次に「select name, open_mode from v$pdbs;」でPDBの名前と現在のOPEN_MODEを確認します。
- PDBの名前が「ORCLPDB」というのがわかったのでデータベースの接続先を「ORCLPDB」へ変更します。
- もう一度「show con_name;」を実行して接続先が変更されていることを確認します。
- 接続先がPDBへ変更されたのでもう一度ユーザー作成を実行すると正常に実行されます。
🔍補足:ORA-65096エラーの仕組みと注意点
ORA-65096: invalid common user or role name は、マルチテナント構成の Oracle Database(12c以降) において、
ルートコンテナ(CDB$ROOT)上でローカルユーザーを作成しようとした場合に発生するエラーです。
以下のポイントを押さえておくと、再発を防ぎやすくなります。
| 観点 | 内容 | 
|---|---|
| エラーの本質 | 共通ユーザーとローカルユーザーの区別を誤ったことによる構文エラー | 
| 共通ユーザー名の規則 | C##またはc##のプレフィックスが必須(COMMON_USER_PREFIXパラメータで変更可) | 
| 発生条件 | CDB$ROOTに接続したままユーザーを作成/命名規則を満たさない場合 | 
| 解決策 | ALTER SESSION SET CONTAINER = <PDB名>でPDBに切り替えてからCREATE USERを実行する | 
| 参考 | SHOW CON_NAME;で現在の接続先(コンテナ)を確認可能 | 
✅ 具体例:安全なユーザー作成手順
もしルートコンテナ側で共通ユーザーを作成したい場合は、以下のようにします。
💡補足メモ
- 
SHOW PDBS;で現在のPDB一覧を確認可能。OPEN_MODEがREAD WRITEでなければユーザー作成はできません。
- 
バージョン19c以降では、CDB構成がデフォルトのため、PDB接続の意識が必須 です。 
- 
TNS接続文字列( SERVICE_NAME)がCDBを指していると、意図せずルート側に接続してしまうことがあります。
