【Oracle】ユーザ作成時のエラーの原因と対処法【ORA-65096】
目的
Oracle 18c Express EditionでCREATE USERしようとしたときにORA-65096が発生したので、対処方法について覚書する。
事象
Oracle 18c XEインストールして、試しにCREATE USERをしたところ、以下の状態に。
SQL> CREATE USER user01
2 identified by password01
3 default tablespace USERS
4 ;
CREATE USER user01
*
行1でエラーが発生しました。:
ORA-65096: 共通ユーザーまたはロール名が無効です
Oracle素人の自分はいきなり躓きました。
調べると、どうやらOracleのインスタンスの中にはCDBとPDBの二つのデータベースがあるらしく、CDB上ではローカルユーザの作成ができないらしい。とうことで、show con_nameで今接続しているデータベースを調べてみた。
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
思いっきりCDBじゃん…
ということで、接続先をPDBとやらへ変更すべく、以下のコマンドでPDBを調べてみました。
SQL> select name, open_mode from v$pdbs;
NAME
--------------------------------------------------------------------------------
OPEN_MODE
--------------------
PDB$SEED
READ ONLY
XEPDB1
READ WRITE
二つ出てきましたが、READ WRITEとなってるXEPDB1というのが、使うべきデータベースっぽい。
接続先を以下のコマンドで変更してみた。
SQL> alter session set container = XEPDB1;
セッションが変更されました。
行けた様子です。
ユーザ作成
XEPDB1につないだ状態で再度トライします。
まずは接続先がちゃんと変更されていることを確認します。
SQL> show con_name;
CON_NAME
------------------------------
XEPDB1
XEPDB1に変更できています。ではいよいよ作成します。
SQL> CREATE USER user01
2 identified by password01
3 default tablespace USERS
4 ;
ユーザーが作成されました。
うまくいきました。ついでにgrantと表領域USERSへの権限追加も行います。
SQL> grant connect, resource to user01;
権限付与が成功しました。
SQL> alter user user01 quota unlimited on USERS;
ユーザーが変更されました。
なお、各種ツールから接続する際は、サービス名をxepdb1とすると接続できます。
まとめ
自分のように普段はPosetgreSQLなど別のRDBMSを使っていて、Oracleは初心者っていうような場合は最初にアーキテクチャを少し理解してから触りだしたほうがいいかも、と思いました。
初めてオラクルデータベースを触っている身ですが、大変たすかりました!ありがとうございます。