ここではOracleのエラー「ORA-65096: 共通ユーザーまたはロール名が無効です」の対処法について紹介します。
目次
エラー現象と原因
Oracle Database 21c Express Edition をインストールして SQL*Plus からユーザーを作成しようと CREATE USER 文を実行したら「ORA-65096: 共通ユーザーまたはロール名が無効です」というエラーが発生しました。
Oracleの「リカバリ・アプライアンスのエラー・メッセージ・リファレンス」の処置としては「有効な共通ユーザーまたはロール名を指定してください。」とのこと。
Oracle 11g では問題なくユーザーは作成できたのですが、Oracle 21c が問題なのか?
C:\>sqlplus / as sysdba |
原因を Copilot に聞いてみると、「ルートコンテナにローカルユーザーを作成しようとした場合に発生します。ルートコンテナには共有ユーザー (common user) と呼ばれる特殊なユーザーしか作成できません。このエラーは、マルチテナントアーキテクチャにおいて、ルートコンテナ内でローカルユーザーを作成しようとした際に発生します。」と返ってきた。
エラーの対処法
Copilot が教えてくれた解決方法は、
1.プラガブルデータベース (PDB) に接続します。ルートコンテナではなく、個々のPDBに対してローカルユーザーを作成する必要があります。
2.接続識別子にユーザーを作成したPDBを指定し、そのPDBに接続したのち、ユーザーを作成してください。
現在接続しているコンテナ名を確認する
まずは現在接続しているコンテナ名を確認します。
show con_name;
SQL>show con_name;
|
現在、CDBに接続されていることが確認できました。これが原因です。
PDBに関する情報を表示する
次に V$PDBS から現行のインスタンスに関連するPDBの名前とOPEN_MODEを表示します。
select name, open_mode from v$pdbs;
SQL>select name, open_mode from v$pdbs;
|
XEPDB1 が Oracle Database 21c Express Edition で作成されるデフォルトのPDBコンテナです。
接続先コンテナを変更する
次に接続先のコンテナを「XEPDB1」に変更します。
alter session set container = XEPDB1;
SQL>alter session set container = XEPDB1;
|
接続先コンテナを変更したらユーザーを作成してみます。
SQL>alter session set container = XEPDB1;
|
無事にユーザーが作成されました。