プロが教える店舗&オフィスのセキュリティ対策術

基本情報技術者試験教科書を読んでいて、DBMSの障害回復機能の記述について疑問が生じました。
教科書には、データベースの障害には記憶媒体などの物理障害とトランザクション処理中の障害とがあり、前者にはロールフォワード、後者にはロールバックを適用すると記述され、最初はそのように理解しました。しかしすぐ後に、トランザクション回復ではケースごとにロールバックやロールフォワードを使い分けるとも記述されています。
最終的にネットも併用しながら、ロールバックとは更新前ログを使ってトランザクション開始時の状態に復帰させる事、ロールフォワードとは更新後ログを使ってコミット時の状態に復帰させる事と理解しました。こう捉えるなら物理障害回復におけるロールフォワードとトランザクション回復におけるロールフォワードは同一の処理だと考える事が出来ます。この認識は正しいでしょうか。

A 回答 (2件)

ロールフォワードは、どういうケースでも同一ですので、その認識は正しいです。



どういうケースであっても、トランザクションの同期点ログの書き込みが完了している場合は、ロールフォワードで、そうでない場合は、ロールバックすることになります。

「トランザクション処理中の障害」という記述の「処理中」というのは、普通は「処理開始から同期点ログ書き込み完了までの間」という意味なので、
>教科書には、データベースの障害には記憶媒体などの物理障害とトランザクション処理中の障害とがあり、前者にはロールフォワード、後者にはロールバックを適用する
という教科書は正しいです。同期点ログが書き込まれてしまったら、まだデータファイルにデータが書き込まれていなくてもトランザクション処理は完了したことになります。
    • good
    • 0
この回答へのお礼

用語の定義上、コミット未完了のトランザクションでしか「トランザクション処理中の障害」は発生せず、また障害発生時にはトランザクションの状態ごと(つまり、同期点ログの書き込みが完了しているか)で処理を分けなければならないが、あくまで「障害の発生したトランザクション」に着目しているため、同期点ログの書き込みが未完了である場合の処理、つまりロールバックを適用する、という事なんですね。合点が行きました。回答ありがとうございます

お礼日時:2016/02/17 22:35

DBの状態を処理する前に戻すか、処理後に戻すかの違い。


ロールバックした場合は、トランズアクションが失われるから、何らかの形で再実行しないといけない。

ただし、トランズアクションに論理的な問題があって実行できない(バグがある)場合は、
ロールバックして、問題を解決する方法を見つけないと処理できないこともある。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

お礼日時:2016/02/17 22:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す