人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

OracleのUNDOとREDOの違いが良く分かりません。
どちらも表に対しての変更内容を保存している気がするのですが…

違いを教えてください!
宜しくお願いします。

●質問者: jun09
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Oracle UNDO
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● mass3
●50ポイント

「どちらも表に対しての変更内容を保存している」は正しいのですが、保存する目的が違います。

UNDOログはロールバック用、REDOログはロールフォワード用です。

ロールバックとロールフォワードの用語がわからない場合は以下を参照ください。

http://e-words.jp/w/E383ADE383BCE383ABE38390E38383E382AF.html

http://e-words.jp/w/E383ADE383BCE383ABE38395E382A9E383AFE383BCE3...


2 ● shinfukui
●50ポイント ベストアンサー

UNDOとは主に「実行した操作を取り消す」ことで、REDOとは「一度やったことをもう一度やる」ということになります。

UNDOはトランザクション取り消し時のロールバック用に、REDOは障害が起きた場合に一旦データをバックアップ時点まで戻し、そこから再度障害直前まで処理をやり直す(ロールフォワード)際に用いられます。

例えばレコードのUPDATEが行われた場合、UNDOデータにそのレコードの「更新前の状態」が丸ごと保存されます。トランザクションがキャンセルされた場合には、UNDOデータに保存された「更新前の状態」をレコードに書き戻す事でキャンセルを実現します。このUNDOデータは、トランザクションコミット前にそのレコードに対してSELECT要求があった場合にも使われたりします。

同様に、レコードのUPDATEが行われた場合には、REDOログにそのUPDATE内容が保存されます。ここに保存されるのはレコードのコピーではなく、UPDATEの命令内容です。データベースの運用では、障害発生に備えて定期的にデータバックアップを取りますが、例えば一日に1回朝バックアップを取るとして、夜に障害が発生すると、バックアップに戻したとしてもその日一日の更新がパァになってしまいます。かといってそんな頻繁にバックアップを取るとパフォーマンスが低下してしまいます。そこで、REDOログという仕組みを使い、バックアップ時点+REDOログの再実行、という形で、障害直前までの状態に復旧させるのです。これにより、バックアップ回数を抑えつつ、障害発生リスクを減らす事が可能になっています。


3 ● pkb_wn
●50ポイント

Redoログは、トランザクションログとも呼ばれていて

チェックポイント時にデータファイル本体に反映させる更新内容を逐次小書き(メモ)しているものです。

ご存知かもしれませんが、データベースシステム(DBMS)は、高パフォーマンス目的に

トランザクション開始後COMMITされた際、直接データファイルを更新せずRedoログにその内容をメモし終わった時点でCOMMIT成功にします。

そして定期的なCHECKPOINTイベントで、記録したRadoログの内容を順次データファイルに反映していきます。

ちなみにロールフォワードによるリカバリは、この仕組みを応用したもので

最新のデータファイルがなくて古い状態のデータファイルしか残っていなくても、その時点からのRedoログさえあれば最新のデータファイルの状態まで持ち込んでいく処理です。


一方、Undoログは、ロールバックセグメントあるいはUndoセグメントのことだと思いますが、

こちらは複数ユーザーからの同時実行性のための機能です。(すべてのDBMSが実装しているものではありません。MSSQLServer2000など)

あるユーザが更新トランザクションを開始した時点のデータをUndoセグメントに保存しておき(スナップショットのようなもの)、

その間に別のユーザが更新対象になっているデータを読み出すとき、このUndoセグメントから読み込まれます。

もしUndoセグメントのしくみを用いないと、おそらく更新中のデータは排他ロックをかけられて(トランザクションの原子性を保つため)読むことが出来ません。


しくみ上の大きな違いは、Redoログは更新内容をこつこつ溜めていくのに対して、Undoセグメントはある時点の内容を丸ごと保存することでしょうか。


これはMySQLのものですが、もしご参考になればどうぞ。

http://www.buena-idea.net/~hironobu/mysql/m-2-08.html

トランザクションの原子性

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32904&fo... (関連のない情報もあります)

◎質問者からの返答

ありがとうございました。

皆様の回答を見て、UNDOとREDOの考え方がわかりました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ