Oracleのマルチテナント構成(CDB構成)では、表領域(tablespace)やUNDOの管理方法がPDB単位で独立しており、従来のデータベース構成とは大きく異なります。
本記事では、CDB構成における表領域の基本から、UNDO管理の方式(ローカルUNDOと共有UNDO)、さらに各コンテナでの表領域確認方法まで、図解付きで初心者にもわかりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. CDB構成と表領域(おさらい)
マルチテナント構成では、1つのOracleインスタンス(CDB)の中に複数のPDB(業務データベース)が格納されます。
それぞれのPDBは、SYSTEM、SYSAUX、USERS、業務用の表領域などを自分専用に持っており、他のPDBやCDB$ROOTとは完全に分離されています。
2. 図解:CDB構成と表領域の関係
【図1】CDB構成における表領域とUNDOのイメージ
+------------------------------+
| CDB(Oracleインスタンス)|
+------------------------------+
| CDB$ROOT |
| |- SYSTEM / SYSAUX |
| |- UNDO(共有UNDO時) |
| |
| PDB1(販売管理DBなど) |
| |- SYSTEM / SYSAUX / USERS |
| |- SALES_TBS(業務用) |
| |- UNDO(ローカルUNDO時) |
| |
| PDB2(在庫管理DBなど) |
| |- SYSTEM / SYSAUX / USERS |
| |- UNDO(ローカルUNDO時) |
+------------------------------+
3. PDBは従来のデータベースに相当
PDB(Pluggable Database)は、従来のOracleデータベースとほぼ同じ役割を果たします。
各PDBには独自の表領域があり、スキーマやデータは他のPDBと共有されません。
4. 表領域作成の基本(PDB接続後)
PDBに接続して、業務用表領域を作成する例は以下の通りです:
-- PDB1に接続して実行
CREATE TABLESPACE sales_data
DATAFILE '/u01/app/oracle/oradata/CDB1/pdb1/sales_data01.dbf'
SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 1G;
-- 表領域の確認
SELECT tablespace_name, status FROM dba_tablespaces;
5. UNDO管理方式:ローカルUNDOと共有UNDOの違い
🔹 共有UNDO(shared UNDO)
- CDB$ROOTにUNDO表領域が1つ存在し、全PDBで共通利用。
- Oracle 12.1など初期バージョンで採用。
🔹 ローカルUNDO(local UNDO)
- 各PDBにUNDO表領域が存在し、PDBごとにUNDOを分離して管理。
- Oracle 12.2以降ではこちらが推奨構成。
- PDB単位でのフラッシュバックやクローンなどが可能になる。
6. 現在のUNDO管理方式を確認するSQL
以下のSQLで、CDBがローカルUNDOを使用しているかどうかを確認できます。
SELECT property_name, property_value
FROM database_properties
WHERE property_name = 'LOCAL_UNDO_ENABLED';
- 結果が
TRUE:ローカルUNDOが有効 - 結果が
FALSE:共有UNDOを使用中
7. 各コンテナでの表領域の確認方法
🔸 CDB環境で すべてのコンテナの表領域 を一覧するには:
SELECT con_id, tablespace_name, status
FROM cdb_tablespaces
ORDER BY con_id, tablespace_name;
| 列名 | 説明 |
|---|---|
CON_ID | コンテナID(CDB$ROOTや各PDBの識別) |
TABLESPACE_NAME | 表領域名 |
STATUS | 表領域の状態(ONLINEなど) |
※
v$pdbsビューなどと結合すれば、PDB名での抽出も可能です。
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 ★CON_ID=3 は PDB
SQL> col tablespace_name for a30
SQL> SELECT con_id, tablespace_name, status
2 FROM cdb_tablespaces
3 ORDER BY con_id, tablespace_name;
CON_ID TABLESPACE_NAME STATUS
---------- ------------------------------ ---------------------------
1 SYSAUX ONLINE
1 SYSTEM ONLINE
1 TEMP ONLINE
1 UNDOTBS1 ONLINE
1 USERS ONLINE
3 SYSAUX ONLINE ★PDBに存在する表領域
3 SYSTEM ONLINE ★
3 TEMP ONLINE ★
3 UNDOTBS1 ONLINE ★
3 USERS ONLINE ★
10行が選択されました。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
8. TEMP表領域にも注意!
- TEMP表領域もPDBごとに定義されます。
- CDB$ROOTのTEMPを共有するのではなく、PDB内に独自のTEMPを持つ構成が基本です。
-- PDBに接続して一時表領域作成
CREATE TEMPORARY TABLESPACE temp2
TEMPFILE '/u01/app/oracle/oradata/CDB1/pdb1/temp02.dbf'
SIZE 100M;
9. 運用上の注意点まとめ
| 項目 | 内容 |
|---|---|
| 表領域はPDBごとに独立 | 他のPDBやCDB$ROOTとは共有されない |
| PDBに接続して操作すること | 表領域作成・確認・変更は必ず接続先をPDBに設定 |
| TEMPやUNDOもPDB単位 | 表領域だけでなく、TEMP、UNDOも独立して定義 |
| ローカルUNDOが推奨 | フラッシュバックやPDB単位の運用に必須 |
まとめ
- CDB構成では、表領域はPDBごとに完全に独立しています。
- UNDOの管理方式には共有UNDOとローカルUNDOがあり、現在はローカルUNDOが推奨。
- 表領域の確認・作成は接続しているコンテナに注意することが大切です。
[参考]
4 CDBの作成および構成




コメント