[Oracle 12c]ユーザーを作成する(ORA-65096エラー)
- 2017/5/4
- Oracle DB
- CDB, ORA-65096, Oracle 12c, PDB, プラガブルデータベース, マルチテナントコンテナデータベース, ユーザーを作成
- コメントを書く
Oracle 12cではCDBとPDBの概念があるため、それより前のバージョンの様にログインすると、ローカルユーザーは作成できない。
ORA-65096
エラーが発生する状況
「ORA-65096: 共通ユーザーまたはロール名が無効です」
sysユーザーでログインして、自ユーザーを作成しようと下記ソースを実行すると上記のエラーが発生する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
-- ユーザーの作成 CREATE USER study -- ユーザー名 IDENTIFIED BY study -- パスワード /* ユーザーのCREATE TABLEなどの 操作先の表領域 省略するとシステム領域になるので 省略しないこと */ DEFAULT TABLESPACE USERS /* データベースが、ソートなどで 使用する一時表領域 省略するとシステム領域になるので 省略しないこと */ TEMPORARY TABLESPACE TEMP ; |
エラーメッセージ全文は下記の通り。
エラー・レポート –
ORA-65096: 共通ユーザーまたはロール名が無効です
65096. 00000 – “invalid common user or role name”
*Cause: An attempt was made to create a common user or role with a name
that was not valid for common users or roles. In addition to
the usual rules for user and role names, common user and role
names must start with C## or c## and consist only of ASCII
characters.
*Action: Specify a valid common user or role name.
要するに、「共通ユーザー」を作りなさい。共通ユーザーは「C##」から始まる名前です。
というもの。
なぜ共通ユーザーでないとだめなのか
Oracle 12cでは、それより前のバージョンとは多少アーキテクチャ(構造)が異なる。
CDBとPDB
Oracle 12cのインストール時に、聞きなれない項目があるのを目にしたと思う。
インストーラーのステップ5
この一番下に「コンテナデータベースとして作成」にチェックがついている。
そして、プラガブル・データベース名という項目がある。
これはいったい何なのかというと。
【以前までのバージョン】
インスタンス→データーベース
なので、普通にログインするとデータベースの操作が可能になる。
【Oracle 12c】
インスタンス→CDB(マルチテナントコンテナデータベース)→PDB(プラガブル・データベース)
12cでは、普通にログインするとCDBにログインする。
CDBには制御ファイルとログファイルがあり、PDBにはデータファイルがある。
CDBには、共通ユーザーや共通ロールしか作成できないため、前述のエラーが発生したのである。
なので、実際にローカルユーザーを作成するにはPDBにログインしなければならない。
テーブルを作ったり、データの各種操作を行うのもPDBに対して行わなければならない。
PDBへの接続を作成する
tsnnames.oraを編集し、プラガブル・データベース用の接続を作成する。
CDBであるORCLの設定をコピペして名前を修正する。
「SERVICE_NAME = プラガブル・データベース名」に修正する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ORCLPDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb) ) ) |
今どちらに接続しているか確認する
「show con_name」
このスクリプトを実行すると、どちらに接続しているかがわかる。
CON_NAME
——————————
CDB$ROOT
と返ってくれば、CDBに接続されている。
PDBに接続を変更する
「alter session set container = プラガナル・データベース名;」
このスクリプトを実行すると、PDBに接続が変更される。
「Sessionが変更されました。」と表示されれば成功。
再度
「show con_name」スクリプトを実行すると。
CON_NAME
——————————
ORCLPDB←PDB名
が表示され、PDBに接続されていることがわかる。
ローカルユーザーの作成
再度、スクリプトを実行する
PDBに接続されている状態で、再度冒頭のローカルユーザーを作成するスクリプトを実行する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
-- ユーザーの作成 CREATE USER study -- ユーザー名 IDENTIFIED BY study -- パスワード /* ユーザーのCREATE TABLEなどの 操作先の表領域 省略するとシステム領域になるので 省略しないこと */ DEFAULT TABLESPACE USERS /* データベースが、ソートなどで 使用する一時表領域 省略するとシステム領域になるので 省略しないこと */ TEMPORARY TABLESPACE TEMP ; |
結果メッセージ
「User STUDYは作成されました。」
が、返ってきたら成功である。
ユーザーに権限を与える
このままでは、ユーザーはログインすらできない。
(ORA-12505が発生する)
ここではDBA権限を与える。
「GRANT DBA TO study ;」
「Grantが正常に実行されました。」と返ってくれば権限が与えられた。
※ここまでの操作は、ユーザーID「sys」で行った。
[Oracle]インストール後の最初のログイン方法
作成したユーザーで接続してみる
Oracle SQL Developerで作成したユーザーで接続してみる。
SIDで接続しようとすると、
ORA-12505が発生するため、ググったら、サービス名で接続すればよいとのことなのでそうした。
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。