[スポンサードリンク]

Oracle 12cではCDBとPDBの概念があるため、それより前のバージョンの様にログインすると、ローカルユーザーは作成できない。

ORA-65096

エラーが発生する状況

「ORA-65096: 共通ユーザーまたはロール名が無効です」

sysユーザーでログインして、自ユーザーを作成しようと下記ソースを実行すると上記のエラーが発生する。

エラーメッセージ全文は下記の通り。

エラー・レポート –
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 = プラガブル・データベース名」に修正する。

今どちらに接続しているか確認する

「show con_name」

このスクリプトを実行すると、どちらに接続しているかがわかる。

CON_NAME
——————————
CDB$ROOT

と返ってくれば、CDBに接続されている。

PDBに接続を変更する

「alter session set container = プラガナル・データベース名;」

このスクリプトを実行すると、PDBに接続が変更される。

「Sessionが変更されました。」と表示されれば成功。

再度
「show con_name」スクリプトを実行すると。

CON_NAME
——————————
ORCLPDB←PDB名

が表示され、PDBに接続されていることがわかる。

ローカルユーザーの作成

再度、スクリプトを実行する

PDBに接続されている状態で、再度冒頭のローカルユーザーを作成するスクリプトを実行する。

結果メッセージ
「User STUDYは作成されました。」
が、返ってきたら成功である。

ユーザーに権限を与える
このままでは、ユーザーはログインすらできない。
(ORA-12505が発生する)

ここではDBA権限を与える。
「GRANT DBA TO study ;」

「Grantが正常に実行されました。」と返ってくれば権限が与えられた。

※ここまでの操作は、ユーザーID「sys」で行った。
[Oracle]インストール後の最初のログイン方法

作成したユーザーで接続してみる

Oracle SQL Developerで作成したユーザーで接続してみる。

SIDで接続しようとすると、
ORA-12505が発生するため、ググったら、サービス名で接続すればよいとのことなのでそうした。

[スポンサードリンク]

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


ピックアップ記事

  1. C#でSQL Serverから値を取得するには、System.Data.SqlClientクラスを使…
  2. SQLServer SELECT文で連番を振る(項目ごとの連番・通し連番) (さらに&helli…
  3. SQL Server認証ができるようにする設定方法 (さらに…)…
  4. IDとパスワードでSQL Serverでログインするユーザーを作成する。 (さらに&hellip…
  5. Oracle 12cではCDBとPDBの概念があるため、それより前のバージョンの様にログインすると、…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る