Oracle CDB環境のローカルUNDOと共有UNDOの違いと選び方

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

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

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

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

コメント

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