はじめに
の続きで 23c Free を使おうとしてユーザ作成時にハマったことのご紹介です。
私と同じく特に11gまでしか利用したことが無い人のご参考になれば幸いです
前提
SQLDeveloperで接続
ホスト名:localhost
ポート:1521
SID:FREE
何をしようとしたか
ユーザを作る
CREATE USER testuser1 IDENTIFIED BY password;
GRANT CONNECT, RESOURCE TO testuser1;
GRANT UNLIMITED TABLESPACE TO testuser1;
以下エラーが発生する
CREATE USER testuser1 IDENTIFIED BY password
エラー・レポート -
ORA-65096: 共通ユーザーまたはロール名は、接頭辞C##で始める必要があります
https://docs.oracle.com/error-help/db/ora-65096/65096. 00000 - "common user or role name must start with prefix %s"
*Cause: An attempt is being made to create a common user or role without
the correct prefix as specified in the COMMON_USER_PREFIX
parameter.
*Action: Specify a valid common user or role name with the correct prefix.
*Params: 1) common_user_prefix
parameter.
エラーメッセージ
なんだと?8i,9i,10g,11gまでしか使ったことない自分は、こんなユーザ名のルールは聞いたことが無い。
ORA-65096: 共通ユーザーまたはロール名は、接頭辞C##で始める必要があります
少し調べると
12cからのマルチテナント・アーキテクチャで、CDB(コンテナデータベース)にユーザを作成しようとしているらしい。
しかも、
マルチテナント・アーキテクチャはOracle Database 12cから出てきた機能になり、次のLong Term ReleaseであるOracle Database 23cでは必須構成(従来型のデータベースはサポート対象外)になります。
とのこと。
なんだと?23cはマルチテナント・アーキテクチャしかない?
ノート:マルチテナント・コンテナ・データベースは、Oracle Database 21cでサポートされる唯一のアーキテクチャです。ドキュメントが改訂されている間は、従来の用語が残っている可能性があります。ほとんどの場合、「データベース」と「非CDB」は、コンテキストに応じてCDBまたはPDBを指しています。アップグレードなどの一部のコンテキストでは、「非CDB」が以前のリリースの非CDBを指しています。
とのこと。
21cからマルチテナント・アーキテクチャのみなのか。
だいぶ時代の流れから取り残されていたと実感。
とりあえず、11gのようにユーザを作るには?
PDB(プラガブル・データベース)に接続して、ユーザを作れば良さそう。
どうやって、PDBに接続するのか?というと、
を見ると
sqlplus sys@localhost:1521/FREEPDB1 as sysdba
とすると FREEPDB1 と思いきや、接続できず。
ホスト名:localhost
ポート:1521
SID:FREEPDB1
SIDじゃなくて、サービス名か!?というところで、試したら接続できた!
ホスト名:localhost
ポート:1521
サービス名:FREEPDB1
あらためてユーザ作成
無事に作成完了。
User TESTUSER1は作成されました。
Grantが正常に実行されました。
Grantが正常に実行されました。
あらためて結論
21c以降、マルチテナント・アーキテクチャ(12cからの機能)というものがスタンダードになっているようなので、11gまでしか利用したことが無い人はご注意を。
とはいえ、CDBにユーザを作ってみたくなったので、今度作ってみたいと思います。
あと、起動とか停止とかも11gまでしか知らない自分としては興味津々。