Oracleのマルチテナント(CDB)環境において、UNDO表領域の管理方式はパフォーマンス、可用性、運用設計に直結する重要な選択です。本記事では、「ローカルUNDOモード」と「共有UNDOモード」の違い、選び方、注意点を図付きでわかりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔰UNDOとは?(おさらい)
Oracle Databaseでは、UNDO表領域にトランザクションの変更前のデータを記録します。これにより次のような動作が可能となります。
- DML文のロールバック(例:
ROLLBACK) - 一貫性のあるSELECT文の実行(例:長時間トランザクション中の読み取り)
- フラッシュバッククエリ・表・PDBの利用
🧩マルチテナント環境でのUNDOモードの違い
CDB環境では、以下の2つのUNDOモードが選択可能です。
| モード | 説明 |
|---|---|
| 共有UNDOモード | CDB$ROOTにある1つのUNDO表領域を全PDBが共有 |
| ローカルUNDOモード | 各PDBが独立したUNDO表領域を持ち、自分のトランザクションにのみ使用 |
📘構成図:共有UNDOとローカルUNDOの違い
【共有UNDOモード(LOCAL_UNDO_ENABLED=FALSE)】
+----------------------+
| CDB |
| +-------------+ |
| | CDB$ROOT |-----+--> UNDO表領域(1つ)
| +-------------+ |
| | PDB1 | |
| | PDB2 | |
| +-------------+ |
+----------------------+
【ローカルUNDOモード(LOCAL_UNDO_ENABLED=TRUE)】
+----------------------+
| CDB |
| +-------------+ |
| | CDB$ROOT |----+--> UNDO表領域(CDB用)
| +-------------+ |
| | PDB1 |----+--> UNDO表領域(PDB1用)
| | PDB2 |----+--> UNDO表領域(PDB2用)
| +-------------+ |
+----------------------+
🔍具体的な違いと比較
| 比較項目 | 共有UNDOモード | ローカルUNDOモード |
|---|---|---|
| UNDO表領域数 | 1(CDB$ROOT) | PDBごとに個別 |
| 初期化パラメータ | LOCAL_UNDO_ENABLED=FALSE | LOCAL_UNDO_ENABLED=TRUE |
| サポートバージョン | 12.1以降 | 18c以降(推奨) |
| PDBのフラッシュバック | 不可 | 可能(FLASHBACK PLUGGABLE DATABASE) |
| クローン・アンプラグ制限 | 一部制限あり(一貫性保証が難しい) | 柔軟な運用が可能 |
| Undo表領域ごとのリソース管理 | 不可 | 可能(PDBごとにUNDO割当ての最適化が可能) |
| 管理の複雑さ | 単純で管理が楽 | 若干複雑だが柔軟性と拡張性に優れる |
✅現在のUNDOモードを確認するSQL
SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
🛠ローカルUNDOモードを使用するには
ローカルUNDOモードはCDB作成時のみ指定可能で、途中からの変更はサポートされていません。
🔧DBCA(GUI)で作成する場合
- 「コンテナ・データベース(CDB)として作成」にチェック
- 「ローカルUNDOモードを使用」のチェックボックスをオン
⚙レスポンスファイルで作成する場合(DBCA -silent)
dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname v19cdb -sid v19cdb \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbName pdb1 \
-characterSet AL32UTF8 \
-totalMemory 2048 \
-datafileDestination /u01/app/oracle/oradata \
-responseFile NO_VALUE \
-localUndoEnabled true
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🎯どちらを選ぶべきか?
| シナリオ | 推奨モード |
|---|---|
| 単純な検証環境で手軽に構築したい | 共有UNDOモード |
| 本番環境・PDBごとの独立性が求められる場合 | ローカルUNDOモード |
| PDBのフラッシュバックを使用したい場合 | ローカルUNDOモード |
| 将来的にPDBのアンプラグ/クローンを頻繁に行う | ローカルUNDOモード |
❗注意点・落とし穴
- ローカルUNDOモードは途中から切り替えることができません。
- UNDO表領域が各PDBに必要なため、ディスク使用量は増加します。
- 自動UNDO管理(
UNDO_MANAGEMENT=AUTO)の指定はどちらのモードでも必要です。
🧠FAQ(よくある質問)
Q. Oracle 19cではどちらが推奨ですか?
A. ローカルUNDOモードが推奨されており、多くの新機能がこのモードを前提としています。
Q. PDBごとのUNDO使用状況を確認できますか?
A. 各PDBに接続した状態でv$undostatを確認可能です。
📝まとめ
- ローカルUNDOモードは18c以降で推奨されており、柔軟なPDB管理が可能
- 共有UNDOモードは単純構成に向いているが、機能制限がある
- モードの選択はCDB作成時にしかできないため慎重に
[参考]
4 CDBの作成および構成




コメント