皆さん、こんにちは!
Oracle12cよりマルチテナント構成(CDB・PDB)が導入されました。
『DBの接続先が、CDBかPDBか知る方法ないかなぁ…』
『CDBで接続してるけど、PDBに接続先変更したいなぁ…』
こんな疑問に答えます。
Oracle接続先がCDBかPDBか確認する方法
CDB接続からPDB接続に切り換える前に、現在接続しているデータベースが「CDBかPDB」を確認する必要があります。
SQL*Plus上で「show con_name」コマンドを実行すると、現在接続中のデータベースを確認できます。
SQL*Plusで「show con_name」コマンドを実行する
コマンドの実行結果によりCDBかPDBか判断します。
- “CDB$ROOT”と表示される場合
CDB接続です。
- “CDB$ROOT”以外が表示される場合
PDB接続です。
例)”ORCLPDB”など
※補足
show con_nameで「非統合」と表示される場合はマルチテナント構成でないデータベースです。
(バージョンにより表示内容が少し異なるかもしれません。でも類似した文言が表示されるかと)
ちなみに、
Oracle21cからマルチテナント構成のデータベースしか作成できません。
Oracle接続先がCDBかPDBか確認する例
SQL*Plusで「show con_name」コマンドを実行し、コマンドの実行結果によりCDBかPDBか判断します。
DB接続先の確認(例)
show con_name
CON_NAME —————————— CDB$ROOT
上記では、
CON_NAMEの値が「CDB$ROOT」なのでコンテナ・データベース(CDB)に接続してます。
CON_NAMEの値が「ORCLPDB」の場合は、プラガブル・データベース(PDB)に接続してます。
PDBに接続されると、通常ユーザの作成等が可能となります。
次にCDB接続からPDB接続に切り換える方法をお伝えします。
Oracleの接続先をCDBからPDBへ切り替える方法
Oracleの接続先をCDBからPDBへ切り替える手順です。
- PDBの名前と現在のOPEN_MODEを確認
select name, open_mode from v$pdbs;
NAME OPEN_MODE ------------- ---------- PDB$SEED READ ONLY ORCLPDB MOUNTED
PDB$SEEDとはPDBが作成される際の初期テンプレートです。
添付レートを使用するわけにはいきませんから、対象PDBはORCLPDBとなります。
ORCLPDBのOPEN_MODEはMOUNTEDは、制御ファイルを読み込んだだけの状態です。
OPENしてデータファイルも読み込み、DBとして使用可能な状態にします。
- プラガブル・データベース(PDB)をOPEN
alter pluggable database ORCLPDB open;
PDBがマウント状態からOPEN状態に変更されます。
OPEN状態になるとREAD WRITEと表示されます
・変更されてるか確認
select name, open_mode from v$pdbs;
NAME OPEN_MODE ------------- ---------- PDB$SEED READ ONLY ORCLPDB READ WRITE
- プラガブル・データベース(PDB)に接続を切替え
alter session set container = ORCLPDB;
接続先がPDBに変更されました。
SQL*Plus上で、show con_name を実行
show con_name
CON_NAME —————————— ORCLPDB
CON_NAMEの値が「ORCLPDB」なのでプラガブル・データベース(PDB)に接続してます。
PDBに接続されているので、通常ユーザの作成が可能となります。
OracleのPDBを自動起動する方法
毎回するのは面倒くさい
↓PDB状態を保持する設定
下記のPDB状態を保持するコマンドで、次回起動時もPDBがOPEN状態となります。
ALTER PLUGGABLE DATABASE ORCLPDB SAVE STATE;
OracleのPDBへTNS接続する方法
PDBを自動起動させたなら、直接PDBへ接続したいですよね。
プラガブル・データベース(PDB)は、TNS接続しか受け付けません。
TNS接続とはtnsnames.oraで定義したネットサービス名(接続文字列)で接続するコトです。
そして、ネットサービス名はサービス名とIPアドレス・PORT番号を定義します。
PDBにもサービス名が存在するので、このサービス名でtnsnames.oraに定義しなければなりません。
間違ってCDBのサービス名でTNS接続すると「ORA-01017」エラーになります。
PDBのサービス名はリスナーの状態確認コマンド「lsnrctl status」を使用して確認できますよー。
~詳細はこちら~
OracleのPDB接続エラー!サービス名とtnsnamesを確認
「記事を読んでもわからないトコがある」「内容が変だよ」
という時は、お気軽にコメントください♪
「もっとSEおっさんに詳しく聞きたい。何かお願いしたい!」
という時は、ココナラまで。メッセージもお気軽に♪
LINEでのお問合わせも受付中!
LINE公式アカウント
メッセージをお待ちしています!
- 応用情報技術者
- Oracle Master Gold
- Java SE Gold
- Java EE Webコンポーネントディベロッパ
- Python エンジニア認定データ分析
- 簿記2級