トランザクションによりデータが変更される場合、変更前に元のデータがコピーされます。変更済データのオリジナル・コピーはUNDOデータと呼ばれます。次の理由から、この情報は保存しておく必要があります。
ロールバックが必要なときにデータベースに作成された未コミットの変更を元に戻す場合。ロールバックは、誤ったトランザクションまたは意図的でないトランザクションの変更を元に戻す場合に必要になります。また、リカバリ操作の一部としても使用されます。
データに対してその他の変更が発生しても、各ユーザーがデータの一貫したビューを取得できることを意味する読取り一貫性を提供する場合。読取り一貫性では、ユーザー・セッションには他のユーザー・セッションに対する未コミットの変更が表示されません(内容を保証しない読取りとも呼ばれる)。たとえば、ユーザーが午前10時に問合せを発行し問合せが15分間続いた場合、問合せ開始後の他のユーザーによる更新または挿入操作に関係なく、問合せ結果には午前10時のデータの状態全体が反映されます。
特定のOracle Flashback機能(Oracle Flashback QueryやOracle Flashback Tableなど)を有効にして、過去のある時点におけるデータの表示やリカバリを可能にする場合。
UNDO表領域
自動UNDO管理により、UNDOデータはUNDO表領域に格納されます。UNDO表領域には、永続表領域のプロパティの他に追加のプロパティがあります。複数のUNDO表領域が存在しても構いませんが、Oracleインスタンスに対してアクティブにできるのは1つのみです。
Database Configuration Assistant(DBCA)でデータベースを作成すると、UNDOTBS1
という名前の自動拡張UNDO表領域が作成されます。この最大拡張サイズは32,767MBです。
UNDO保存期間
Oracle Databaseでは、アクティブ・トランザクションで使用されているUNDOデータが、そのトランザクションがコミットされるまで上書きされないことが自動的に保証されます。トランザクションのコミット後、そのUNDOデータが占有している領域は再利用または上書き可能になります。この場合、UNDO表領域の領域が不足すると、そのUNDOデータは上書きされる可能性があります。
トランザクションのコミット後も、Oracle Flashback機能の正常な実行を保証し、長時間実行問合せの読取り一貫性を維持するうえで、UNDOデータを保持する(上書きしない)ことは有効です。そのために、データベースではUNDO保存期間がメンテナンスされ、自動的にチューニングされます。コミット済のUNDOデータのうち、その経過時間がUNDO保存期間に達していないものは、問合せやOracle Flashback操作で使用できるように保持されます。
関連項目:
読取り一貫性の詳細は、『Oracle Database概要』を参照してください。
Oracleフラッシュバック機能の詳細は、Oracle Database開発者ガイドを参照