CDB構成における表領域とUNDO管理

CDB/PDB(マルチテナント)

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の作成および構成

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました