小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【Oracle】UNDOログとREDOログの違いが分からないのでまとめてみたよ。

はじめに

OracleのUNDOログとREDOログの違いが分からないのでまとめてみました。

OracleのUNDOとREDOの違いが良く分かりません。 どちらも表に対… - 人力検索はてなOracleのUNDOとREDOの違いが良く分かりません。 どちらも表に対… - 人力検索はてな
Oracleバックアップ・リカバリ実践テクニック
青木 浩朗
ソフトリサーチセンター
売り上げランキング: 565,114

UNDOログ

UNDOとは「実行した操作を取り消す」ことです。WindowsでいうところのCtrl + Zですね。
トランザクションにおいて、更新済みレコードをロールバックさせる際は、UNDOログが使われます。

トランザクションロールバックの仕組み

あるレコードにUPDATEが行われた場合、UNDOログにはレコードの「更新前の状態」が保存されます。
トランザクションのロールバックが指示された場合には、UNDOログに保存された「更新前の状態」を戻す事で、トランザクションの取り消し(ロールバック)を行います。
f:id:replication:20150505121916j:plain

ちなみに、このUNDOログはトランザクションがコミットされる前のデータを、他のプロセスが要求してきた場合も見せたりします。
f:id:replication:20150505123525j:plain

REDOログ

REDOログは、データベースに障害が発生した場合に、データを復旧するために使われます。
具体的には、障害が発生したらバックアップ時点まで戻し、そこから障害直前まで処理をやり直す(ロールフォワード)際に用いられます。

REDOログは、あるレコードにUPDATEが行われた場合に、そのUPDATEの命令が保存されます。UNDOログとの違いは、UNDOログは変更前のデータが格納されているのに対して、REDOログにはデータではなく、変更命令が格納されている点です。
f:id:replication:20150505145541j:plain

REDOログの用途

データベースの運用では、障害発生に備えて定期的にデータバックアップを取ります。
1日の営業終了後、夜間にバックアップを取る運用の場合、翌営業日の午後に障害が発生すると、午前中のデータがすべてロストします。

そこで、REDOログを使って前日にバックアップした時点からの差分部分を復旧させ、障害直前までの状態に復旧させます。
f:id:replication:20150505150342j:plain