Oracle Database 12c以降で導入されたマルチテナントアーキテクチャでは、1つのコンテナ・データベース(CDB)内に複数のプラガブル・データベース(PDB)を持つことができます。
この記事では、CDB環境下でそれぞれのCDBおよびPDBに接続する基本的な方法を解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
■ CDBとPDBの構成イメージ
+----------------------------+
| CDB (例:CDB$ROOT) |
| +----------------------+ |
| | PDB1 (例:PDB01) | |
| | PDB2 (例:PDB02) | |
| +----------------------+ |
+----------------------------+
- CDB(CDB$ROOT):システム共通のコンテナ
- PDB:アプリケーションのデータを格納する個別データベース
■ コンテナの確認方法
現在のセッションが接続しているコンテナ名を確認するには以下のコマンドを使用します。
SQL> show con_name;
CDB全体に存在するPDBを一覧表示するには以下のSQLを使います。
SQL> show pdbs;
■ CDBに接続する方法
1. リスナー経由で接続する(sqlplusなど)
$ sqlplus sys/<password>@<ネットサービス名> as sysdba
例:
$ sqlplus sys/oracle@cdb as sysdba
※ tnsnames.ora にCDB接続情報を記載していることが前提です。
[oracle@v19single ~]$ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 14-4月 -2025 11:19:38
Copyright (c) 1991, 2023, Oracle. All rights reserved.
(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日 14-4月 -2025 11:02:21
稼働時間 0 日 0 時間 17 分 17 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
ログ・ファイル /u01/app/oracle/diag/tnslsnr/v19single/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=v19single)(PORT=1521)))
サービスのサマリー...
サービス"31ef11ab7b3d2b6de0657a3f3a8cb9c3"には、1件のインスタンスがあります。
インスタンス"V19M"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"V19M"には、1件のインスタンスがあります。
~~~~~~★CDB のサービス名
インスタンス"V19M"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"V19MXDB"には、1件のインスタンスがあります。
インスタンス"V19M"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"pdb01"には、1件のインスタンスがあります。
~~~~~~~★PDB のサービス名
インスタンス"V19M"、状態READYには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
[oracle@v19single ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora
[oracle@v19single ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
CDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = v19single )(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = v19m )
)
)
PDB01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = v19single )(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb01 )
)
)
[oracle@v19single ~]$ sqlplus / as sysdba ★ローカル接続
SQL*Plus: Release 19.0.0.0.0 - Production on 月 4月 14 11:25:40 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT ★CDB に接続
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ sqlplus sys/oracle@cdb as sysdba ★リモート接続
SQL*Plus: Release 19.0.0.0.0 - Production on 月 4月 14 11:26:54 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT ★CDB に接続
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
■ PDBに接続する方法
PDBに接続するには、以下の2通りの方法があります。
① CDB接続後にPDBへ切り替える(ALTER SESSION SET CONTAINER)
$ SQLPLUS / AS SYSDBA
SQL> SHOW CON_NAME;
-- CDB$ROOTにいる状態
SQL> ALTER SESSION SET CONTAINER = PDB01;
-- 切り替え後の確認
SQL> SHOW CON_NAME;
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 月 4月 14 11:31:23 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
SQL> alter session set container=pdb01; ★PDB へ接続
セッションが変更されました。
SQL> show con_name
CON_NAME
------------------------------
PDB01 ★PDB へ接続できている
② PDBに直接接続する(リスナー経由)
$ sqlplus user1@PDB01
※この場合は、tnsnames.ora にPDB01のエントリが必要です。
PDB01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = pdb01.localdomain)
)
)
SQL> show user
ユーザーは"SYS"です。
SQL> show con_name
CON_NAME
------------------------------
PDB01
SQL> create user user1 identified by user1; ★ユーザー作成
ユーザーが作成されました。
SQL> grant connect to user1; ★CONNECT ロールを付与
権限付与が成功しました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ sqlplus user1/user1@pdb01 ★リモート接続
SQL*Plus: Release 19.0.0.0.0 - Production on 月 4月 14 11:35:42 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> show con_name
CON_NAME
------------------------------
PDB01 ★PDB に接続できている
■ SYSユーザーでの接続例
PDBにSYSDBA権限で接続する場合は、以下のようにします。
$ sqlplus sys/oracle@PDB01 as sysdba
[oracle@v19single ~]$ sqlplus sys/oracle@PDB01 as sysdba ★PDB にリモート接続
SQL*Plus: Release 19.0.0.0.0 - Production on 月 4月 14 11:38:09 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> show con_name
CON_NAME
------------------------------
PDB01 ★PDB に接続できている
■ 各接続方式まとめ表
| 接続対象 | 方法 | コマンド例 |
|---|---|---|
| CDB直下 | ローカル | sqlplus / as sysdba |
| CDB直下 | リスナー | sqlplus sys/oracle@CDB as sysdba |
| PDBへ | CDBから切替 | ALTER SESSION SET CONTAINER = PDB名; |
| PDBへ | リスナー直結 | sqlplus user1/user1@PDB名 |
■ 注意点
- 通常ユーザー(例:
user1)はリスナー経由でPDBに接続する必要があります。 - 共通ユーザー(例:
c##admin)は権限があればCDBにもPDBにも接続可能です。 - PDBは「MOUNTED」が停止状態、「READ WRITE」が起動状態である点に注意してください。
■ まとめ
CDB/PDB構成においては、どのコンテナに接続しているかを常に意識することが重要です。SHOW CON_NAMEとSHOW PDBSを活用して、セッションの状態を確認しながら操作を行いましょう。
[参考]
4 CDBの作成および構成




コメント