はじめに
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」の模様です)
SQL> select name, open_mode from v$pdbs;
このように、「$SEED」ではないほうのNAMEがPDBの名前です。複数ある場合は適宜選んでください。
1. PDBの起動
PDBを起動します。仮に起動済みであっても「ORA-6511: プラガブル・データベースPDB名はすでにオープンしています」が発生するだけなので特に問題はありません。
また、0. PDBの名前確認でOPEN_MODEが「READ WRITE」となっていた場合はPDBが起動されていますので飛ばしてよいです。
SQL> alter pluggable database PDB名 open;
2. PDBへ切り替え
PDBへ切り替えます。これで目的は達成です。
alter session set container = PDB名;
3. 接続確認
「show con_name」でPDB名が表示されれば成功です。
また、sqlplusでPDBにワンライナーで接続するには、以下のように「@ホスト名:ポート名/(PDBの)サービス名」を指定します。
sqlplus system/password@localhost:1521/orclpdb