少しはまったので記事にします。
Oracle12cをインストールしたのですが、
本の通りに、コマンドプロンプトで
sqlplus system/oracle
でDBに接続して
CREATE USER ora01 IDENTIFIED BY oracle;
としても
ORA-65096: 共通ユーザーまたはロール名が無効です
と出てユーザー作成ができませんでした。
Oracle 12cでは「マルチテナントコンテナデータベース」(CDB)と呼ばれる親DBが存在し、
その下に「プラガブルデータベース」(PDB)と呼ばれる子DBが存在する作りになっているようです。
接続先DBの確認
SQL> show con_name
CON_NAME
——————————
CDB$ROOT
SQL>
どうやらCDBの方に接続しているようです。
では、PDBにはどうやって接続するのか調べてみました。
Oracle付属のlsnrctlコマンドで確認します。
c:\temp\WORK>lsnrctl status
LSNRCTL for 64-bit Windows: Version 12.1.0.2.0 – Production on 23-2月 -2016 05:46:29
Copyright (c) 1991, 2014, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))に接続中
リスナーのステータス
————————
別名 LISTENER
バージョン TNSLSNR for 64-bit Windows: Version 12.1.0.2.0 – Production
開始日 23-2月 -2016 04:54:37
稼働時間 0 日 0 時間 51 分 56 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル C:\app\oracle\product\12.1.0\dbhome_1\network\admin\listener.ora
ログ・ファイル C:\app\oracle\diag\tnslsnr\TOWER1\listener\alert\log.xml
リスニング・エンドポイントのサマリー…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=HOGEHOGE)(PORT=5500))(Security=(my_wallet_directory=C:\APP\ORACLE\admin\orcl\xdb_wallet))(Presentation=HTTP)(Session=RAW))
サービスのサマリー…
サービス”CLRExtProc”には、1件のインスタンスがあります。
インスタンス”CLRExtProc”、状態UNKNOWNには、このサービスに対する1件のハンドラがあります…
サービス”orcl”には、1件のインスタンスがあります。
インスタンス”orcl”、状態READYには、このサービスに対する1件のハンドラがあります…
サービス”orclXDB”には、1件のインスタンスがあります。
インスタンス”orcl”、状態READYには、このサービスに対する1件のハンドラがあります…
サービス”pdborcl”には、1件のインスタンスがあります。
インスタンス”orcl”、状態READYには、このサービスに対する1件のハンドラがあります…
コマンドは正常に終了しました。
c:\temp\WORK>
上記結果から待ち受けポート番号は1521、PDB名はpdborclである事がわかります。
接続コマンドは下記になります。
sqlplus system/oracle@localhost:1521/pdborcl
SQL>CREATE USER ora01 IDENTIFIED BY oracle;
無事に接続でき、ユーザー作成ができました。
一般ユーザでの接続は
sqlplus ora01/oracle@localhost:1521/pdborcl
で接続できます。