Help us understand the problem. What is going on with this article?

Oracle プラガブルデータベースのsqlplusでの切替方法

More than 3 years have passed since last update.

はじめに

Oracle 12c 以降ではマルチテナント・アーキテクチャが追加となっています。参考
11g以前とはsqlplusによる接続の仕方が異なり、少し困ったのでその方法を書いていきます。

ちなみに、具体的に困った事としては、スキーマ作成しようとしたら、
「ORA-65096: 共通ユーザーまたはロール名が無効です」
が発生してしまいました。
sqlplusでのデフォルト接続先がCDB(コンテナデータベース)だったからです。
PDB(プラガブルデータベース)へ切り替えなければいけませんでした。

結論

sqlplus ユーザ/パスワード as sysdba
SQL> alter session set container = orclpdb;

手順

前置き

※ 今回のsqlplus上での作業は基本的にsysdba権限が必要ですので、以下のように接続している事を前提とします。

sqlplus ユーザ/パスワード as sysdba

以降、先頭行が「SQL> 」となっている箇所はsqlplusに接続している事を示します。

0. PDBの名前確認

作成したPDBの名前が分かっている場合は飛ばしていいです。
名前を忘れた場合(←私がそうでした)や、そもそもPDBを作成したのか不明な場合についてです。
(Oracleインストール時のデフォルト名は「orclpdb」の模様です)

PDB名前確認
SQL> select name, open_mode from v$pdbs;

2017-06-19_14h40_53.png
このように、「$SEED」ではないほうのNAMEがPDBの名前です。複数ある場合は適宜選んでください。

1. PDBの起動

PDBを起動します。仮に起動済みであっても「ORA-6511: プラガブル・データベースPDB名はすでにオープンしています」が発生するだけなので特に問題はありません。
また、0. PDBの名前確認でOPEN_MODEが「READ WRITE」となっていた場合はPDBが起動されていますので飛ばしてよいです。

PDBオープン
SQL> alter pluggable database PDB名 open;

(参考:起動済みの場合)
2017-06-19_14h53_21.png

2. PDBへ切り替え

PDBへ切り替えます。これで目的は達成です。

PDB切替
alter session set container = PDB名;

3. 接続確認

「show con_name」でPDB名が表示されれば成功です。
2017-06-19_16h14_38.png

また、sqlplusでPDBにワンライナーで接続するには、以下のように「@ホスト名:ポート名/(PDBの)サービス名」を指定します。

接続例
sqlplus system/password@localhost:1521/orclpdb
nisioka
ここでの発言は個人の見解であり、所属する組織の公式見解ではありません。 書き込む内容としてはwebアプリ系が多いと思います。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away