目的
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は初心者っていうような場合は最初にアーキテクチャを少し理解してから触りだしたほうがいいかも、と思いました。