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