REDOとUNDO
1 ACID特性
トランザクションが備えなければならないのがACID特性です。この特性を実現するためにREDOやUNDOが存在するといってもよいでしょう。REDOやUNDOの説明に入る前にACID特性を理解しておく必要があります。
■原子性:(Atomicity)
トランザクションに含まれるデータ変更は、「すべて変更される」か「すべて変更されない」かのどちらかでなければならないという特性
■一貫性:(Consistency)
トランザクションによってデータ間に不整合を起こさないという特性
■分離性:(Isolation)
トランザクションは独立されており、単独で実行された際も同時に実行した際も同じ結果になるという特性
■持続性:(Durability)
コミット(commit)されたトランザクションは障害時でも復旧できるという特性
2 REDOアーキテクチャ
データ更新はキャッシュ上で行われます。データ更新の際にREDOログと呼ばれるデータが生成されます。REDOログは変更履歴情報が記載されています。
以下にOracleクライアントから更新処理要求を受けてから、アーカイブREDOログファイルが生成されるまでのイメージ図を示します。
上図をプロセスの動きを中心に解説します。
●Oracleサーバプロセス[サーバープロセス]
サーバプロセスは共有メモリ上のバッファキャッシュのデータの更新とREDOログバッファへ更新情報の記録を行います。サーバプロセスはCOMMIT時にはLGWRプロセスへディスク上のオンラインREDOログファイルへの書き出し依頼します。
●LGWRプロセス[ログライター(LGWR)]
サーバプロセスからREDOログファイルへの書き出し依頼を受けると、REDOログバッファからREDOログファイルへの書き出しを行います。書き出しが終わるとサーバプロセスへ完了を知らせます。
●ARCHプロセス[アーカイバ(ARCn)]
REDOログファイルはあくまで一時保管用です、長期保管用として存在するアーカイブREDOログファイルがあります。ARCHプロセスは定期的にREDOログファイルをアーカイブREDOログファイルへ移します。
3 UNDOアーキテクチャ
UNDOはデータを以前のものに戻すために存在するデータです。データが更新されると、サーバプロセスによりUNDO情報が生成されます。UNDO情報はセグメントに格納され、UNDO表領域で管理されます。UNDOセグメントはリングバッファです。通常リングバッファはしばらくすると上書きされてしまいますが、未COMMITデータは上書きされずUNDOセグメントを大きくすることで対応します。
4 ロールバック時のREDOとUNDOの動作
未COMMIT状態であってもバッファキャッシュではすでにデータ変更されています。ロールバック時はUNDO情報を使用し元の状態に戻します。サーバプロセス異常終了時もプロセスモニター(PMON)と呼ばれるバックグランドプロセスが定期的にチェックを行いサーバプロセスのクリーアップを行います。その後、システムモニター(SMON)と呼ばれるバックグランドプロセスがデータをもとの状態に戻します。
5 インスタンスリカバリ時のREDOとUNDOの動作
コンピュータのクラッシュなどによりインスタンスをリカバリする際は、古いデータファイルにREDOログを適用することで最新状態へ復帰させます。しかしREDOログの中には未COMMIT情報も入っているため、UNDO情報を使用しロールバックすることで復旧
となります。
<オラクルデータベース概要(豆知識)>
|
スポンサードリンク
|