皆さん、こんにちは!
Oracle12cよりマルチテナント構成(CDB・PDB)が導入されました。
11g以前とアーキテクチャが異なるので、
以前のようにユーザ作成すると…
ORA-65096: 共通ユーザーまたはロール名が無効です
というエラーが発生するのです。
『ORA-65096エラーは解消できるんかな…』
『どうやってユーザー作成するんだろう…』
こんな疑問に答えます。
OracleのCDBで共通ユーザ作成!ORA-65096の解消法
Oracle12cよりマルチテナント構成(※CDB・PDB)が導入されました。
- CDB:コンテナデータベース
- PDB:プラガブルデータベース
CDBへ接続時、Oracle11g以前と同じ感覚でユーザ作成(create user)したらエラーとなります。
ORA-65096: 共通ユーザーまたはロール名が無効です
上記は『CDBには共通ユーザしか作成できないよ』というエラーです。
CDBはPDBの基盤となる共通DBなので、CDBのユーザは共通ユーザと呼ばれます。
ORA-65096の解消方法は2つあります。
(その1)ORA-65096の解消法:共通ユーザを作成したい場合
CDBユーザに管理者として、共通ユーザを作成したい場合は、
ユーザ名の先頭に「C##」を入れてあげる必要があります。
共通ユーザの作成例
create user c##testuser identified by testuserpw;
これだけでOKです。
(その2)ORA-65096の解消法:従来ユーザを作成したい場合
共通ユーザではなく、従来のユーザを作成したい場合は、接続先をCDBからPDBへ変更してユーザ作成する必要があります。
この時、変更先のプラガブル・データベース(PDB)はOPENされていることが前提となります。
下記の例を参考にしてください。
- プラガブル・データベース(PDB)をOPENする(例)
alter pluggable database ORCLPDB open;
- プラガブル・データベース(PDB)へ切り替える(例)
alter session set container = ORCLPDB;
詳細はこちらの記事にまとめました。
PDB接続に関しては注意点があるので次に解説します。
OracleのPDB接続エラーはサービス名とtnsnamesを確認
OracleのCDBで共通ユーザ作成エラーが解消しても、OracleのPDB接続でエラーとなる場合があります。
プラガブル・データベース(PDB)は、TNS接続しか受け付けません。
TNS接続とはtnsnames.oraで定義したネットサービス名(接続文字列)で接続するコトです。
そして、ネットサービス名はサービス名とIPアドレス・PORT番号を定義します。
PDBにもサービス名が存在するので、このサービス名でtnsnames.oraに定義しなければなりません。
間違ってCDBのサービス名でTNS接続すると「ORA-01017」エラーになります。
PDBのサービス名はリスナーの状態確認コマンド「lsnrctl status」を使用して確認できますよー。
~詳細はこちら~
OracleのPDB接続エラー!サービス名とtnsnamesを確認
~『PDB・CDBって何?』という方はこちら~
Oracleマルチテナントとは?CDBとPDBの3つのメリット!
「記事を読んでもわからないトコがある」「内容が変だよ」
という時は、お気軽にコメントください♪
「もっとSEおっさんに詳しく聞きたい。何かお願いしたい!」
という時は、ココナラまで。メッセージもお気軽に♪
LINEでのお問合わせも受付中!
LINE公式アカウント
メッセージをお待ちしています!
- 応用情報技術者
- Oracle Master Gold
- Java SE Gold
- Java EE Webコンポーネントディベロッパ
- Python エンジニア認定データ分析
- 簿記2級