Oracle 12c以降のマルチテナント構成(CDB構成)では、従来の DBA_ ビューに加えて、CDB_ ビューが新たに導入されました。
これらのビューの役割や使い分けが分かりにくいと感じている方も多いのではないでしょうか。
本記事では、CDB構成環境における CDB_ ビューと DBA_ ビューの違いについて、初心者の方にも分かりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. CDB構成とは?
Oracle 12c以降で導入されたマルチテナント機能により、1つのコンテナ・データベース(CDB)内に複数のプラガブル・データベース(PDB)を格納できます。
+-----------------------------+
| CDB |
| +--------+ +------------+ |
| | CDB$ROOT| | PDB1 | |
| +--------+ +------------+ |
| | PDB2 | |
| +------------+ |
+-----------------------------+
この構成に対応するために、Oracleでは新しいビュー体系(CDB_ビュー)が導入されました。
2. DBA_ビューとは?
DBA_ビューは、現在接続中のコンテナ内のデータベース情報を表示します。
たとえば、CDB$ROOT に接続していれば、CDB共通情報が表示され、PDB1 に接続していれば、そのPDBに関する情報だけが表示されます。
-- PDBに接続中の場合
SELECT username FROM dba_users;
この場合、出力されるのは PDB1 内のユーザー情報のみです。
3. CDB_ビューとは?
一方、CDB_ビューは すべてのコンテナの情報を統合して表示します。
出力には、どのコンテナのデータかを示す CON_ID(Container ID)列が追加されており、CDB$ROOT や各PDBのデータを区別できます。
-- CDB$ROOT で実行
SELECT username, con_id FROM cdb_users;
このように、すべてのPDBおよびCDB$ROOTのユーザー情報が確認できます。
4. 比較表:CDB_ビュー vs DBA_ビュー
| 項目 | DBA_ビュー | CDB_ビュー |
|---|---|---|
| 対象データ | 現在接続中のコンテナのみ | すべてのコンテナ(CDB$ROOT含む) |
| CON_ID列 | なし | あり |
| 利用目的 | 単一コンテナの詳細確認 | 全体の俯瞰、PDB間の比較 |
| 使用例 | SELECT * FROM dba_tables; | SELECT * FROM cdb_tables; |
5. CON_IDの確認方法
どのコンテナのデータかを識別するためには、CON_IDを確認する必要があります。
以下のSQLで現在のコンテナIDと名前が確認できます:
SELECT con_id, name FROM v$containers;
6. 実践例:ユーザー一覧をCDB_ビューで確認
SELECT username, con_id
FROM cdb_users
ORDER BY con_id;
出力例:
USERNAME CON_ID
---------- -------
SYS 1
SYSTEM 1
HR 3
SCOTT 4
このように、どのPDBにどのユーザーが存在するか一目で分かります。
まとめ
OracleのCDB構成環境では、以下のように CDB_ビューと DBA_ビューを使い分けることが重要です:
- PDB単位の情報確認:
DBA_ビュー - 全コンテナ横断での情報確認:
CDB_ビュー
特に管理者視点で全体を把握したい場合には、CDB_ビューの活用が必須です。
これらを使い分けて、より効率的にCDB構成のデータベースを管理していきましょう。
[参考]
4 CDBの作成および構成




コメント