スキーマ(ユーザ)作成時に「ORA-65096」~Oracle 12cのアーキテクチャはここが違う~:DBMoto


Oracle 12cでスキーマ(ユーザ)を作成すると下記のエラーが発生する場合があります。

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

このエラーへの対処の前に、まずはOracle 12cのアーキテクチャを理解する必要があります。

まず、Oracle 11gR2 の場合:

続いて、Oracle 12c の場合:

Oracle 12cでは、まず「マルチテナントコンテナデータベース」(CDB)と呼ばれる親DBが存在し、その下に「プラガブルデータベース」(PDB)と呼ばれる子DBが存在します。
PDBは仮想DBのようなもので、1つのインスタンス上で複数作成・起動することができます。

そしてCDBとPDBには下記のルールがあります。

・通常のローカル接続(11gR2までと同じように接続)した場合、CDBに接続される。
・CDBにはユーザスキーマを作成することはできない。(ORA-65096となる)
・ユーザスキーマはPDBに接続して作成する必要がある。
・CDBからはユーザスキーマが見えない。

つまり、「ORA-65096」が発生するのは、これまでの Oracle 11gR2 までと同じ感覚で接続し、CDBに作成しようとしていたためです。
すなわちPDBに接続して作成する必要がありますが、下記の手順を取る必要があります。

1. PDBを起動する

PDBを起動するためにsysadminで接続し、下記のSQLを実行します。
SQL> alter pluggable database pdborcl open;

PDBを停止する場合は、下記のSQLを実行します。
SQL> alter pluggable database pdborcl close immediate;

2. PDBへ接続するために「tnsnames.ora」を編集する。

デフォルトではCDBへ接続されるようになっているので、新規でPDB接続用を作成します。
下記の例ではCDB接続用を「ORCLCDB」、PDB接続用を「ORCLPDB」としています。

なお、PDB名はインストール時に設定した↓です。

以上で、クライアントからPDBへ接続できるようになり、スキーマの作成が可能となります。

続いてSQLPLUSからPDBへ接続する手順です。

1. 現在の接続先を確認する

下記のSQLを実行します。CDBに接続されていることが分かります。
SQL> show con_name

2, 接続先を変更する

下記のSQLを実行します。PDBに接続されていることを確認します。
SQL> alter session set container = pdborcl;

※本記事は現在検証中のため、誤記等が含まれている可能性がある点ご承知おきください。

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください