• ベストアンサー

障害回復(ロールバックとロールフォワード)について

Kazma_hkの回答

  • Kazma_hk
  • ベストアンサー率26% (115/428)
回答No.1

ロールバックとロールフォワードの違いですね。 ロールバックはトランザクションが完了する前に障害が起きた場合にトランザクション開始時点に戻すこと。 ロールフォワードは、チェックポイント時点に戻すことです。 チェックポイントとはいわゆるセーブポイントです。 セーブポイントまで戻るということはそのほかのデータに関してもチェックポイント時点まで戻ってしまいます。 Aはチェックポイントt2時点でデータが確定しているためロールフォワードの意味がありません。t5からt2に戻っても変化がないためです。 B,Eに関しては、t2時点で変更はないですが、t2からt5までの間にデータの変更があるため、t2時点まで戻さないと他のデータとの整合性がなくなってしまうため必要となります。

jolyyne
質問者

お礼

Kazma_hkさん ご回答ありがとうございます。 ロールバック、ロールフォワード、それぞれの具体的な役割のイメージがやっと頭の中でできました。 ありがとうございました。

関連するQ&A

  • ロールバックとロールフォワード(データベーススペシャリスト試験)

      t0  t1  t2   t3   t4   t5         |           | A s---e  |           |         |           | B s-------------e       |         |           | C s------------------------|         |           | D       |   s----e   |         |           | E       |   s---------| 図がずれていたらごめんなさい。 A~Eはトランザクション sはトランザクション開始 eはコミット t0~t5は時間を表していて 時間t2でチェックポイント 時間t5で障害が発生したとします。 参考書によると復旧時に CとEはロールバックを行い、 BとDはロールフォワードを行うとあります。 B、C、Dはわかるのですが Eにロールバックが必要な理由がわかりません Eを再び実行するためにはデータは トランザクションを開始したt3時点の状態であればよいはずです。 そしてチェックポイント(=t2)の状態はt3と同じなので、 Eの更新前ファイルを使ってデータをロールバックする必要はないように思えます。 どこで間違っているでしょうか。。。

  • チェックポイントとロールバックのタイミングについて。

    下記のパターンの際に、transaction logファイルに書き込まれるのか否かを教えて下さい。 A:チェックポイントをまたがったトランザクションで完了後にシステム障害が発生した場合。 =>私の認識では、ロールフォワードによって、データベースとtransaction logファイルにデータが書き込まれる。と考えているのですが、正しいでしょうか? B:チェックポイントを一度も通らずに、トランザクションが完了。完了後にシステム障害が発生。 =>Aと同じですか? C:トランザクション実行中にシステム障害が発生した場合。 =>ロールバックされて、transaction logファイルにのみ書き込まれて、データベースには書き込まれない。というのは正しいでしょうか? よろしくお願いします^^

  • ロールバックとチェックポイント関連で質問です。

    下記のパターンの際に、transaction logファイルに書き込まれるのか否かを教えて下さい。 A:チェックポイントをまたがったトランザクションで完了後にシステム障害が発生した場合。 =>私の認識では、ロールフォワードによって、データベースとtransaction logファイルにデータが書き込まれる。と考えているのですが、正しいでしょうか? B:チェックポイントを一度も通らずに、トランザクションが完了。完了後にシステム障害が発生。 =>Aと同じですか? C:トランザクション実行中にシステム障害が発生した場合。 =>ロールバックされて、transaction logファイルにのみ書き込まれて、データベースには書き込まれない。というのは正しいでしょうか? よろしくお願いします^^

  • ロールバックできず困っています。

    1.テーブルAに、新たに列を追加したテーブルBを作成。 ↓ 2.テーブルAのデータをテーブルBにコピー。 ↓ 3.テーブルAを削除。 ↓ 4.テーブルBの名前をテーブルAに変更。 という一連の処理があります。 これらの処理でエラーが発生した場合、処理実行前の状態に戻したいのですが、ロールバックできずに消されるはずだった不要なテーブルが残ってしまいます。 何か方法はありますか?よろしくお願いします。

  • MySQLでロールバックできない!

    JDBCでMySQLに接続し、ロールバック/コミットしたいのですが、以下の例外が発生してロールバックできません。 java.sql.SQLException: General error: Warning: Some non-transactional changed tables couldn't be rolled back 同じコードで、PostgreSQLでは問題なく動作します。 MySQLはDBMSとして自動コミットになっているとのことですが、JDBCからロールバックしたいときはどうすれば良いのでしょうか? 有名な問題なのかもしれませんが、回避策が見つけられませんでした。 ご回答、よろしくお願いします。

    • ベストアンサー
    • Java
  • トランザクションを張って対話型でのコミット・ロール

    トランザクションを張って更新処理を行った後に、 ユーザの「はい」「いいえ」ボタンによって、 トランザクションのコミットとロールバックを切り替えることは可能でしょうか。 処理の流れは以下の様になります。 1.データ更新前の値を取得 2.トランザクションの開始 3.データ更新 4.データ更新前の値とデータ更新後の値を比較して、   差分がある場合は確認メッセージを表示する。 5.確認メッセージで「はい」がクリックされた場合はコミットする。 6.確認メッセージで「いいえ」がクリックされた場合はロールバックする。 実装方法はどのようでも構いません。 どなたかご教授ください。

  • PLSQlでのロールバック

    以下の様な処理をしたいのですがうまくいきません。 ・カーソルc_infoで取得した人数分、処理を行いたい。 ・ある1人が異常終了した場合は、その人の処理を全てロールバック  した後、次の人に進む。 begin for r_info in c_info loop begin 処理A  処理B  処理C exception  rollback; end; end loop exception end; こういう風に組んだのですが、 ある一人が処理Cで異常終了した時、その人の処理A,処理B がコミットされてしまっています。 どのようにすればよいでしょうか? ご教授ください。

  • トランザクションのネストについて

    トランザクションのネストについて お世話になります。 今、ストアドの中でストアドを実行するようなSQLを作成しているのですが、 このときのトランザクション処理について教えていただきたいです。 簡単な流れとしましては Aトランザクション開始(大枠のストアド) ↓ 処理a  ↓  Bトランザクション開始  ↓  (Aストアドの中のストアド実行)  ↓  Bコミット  ↓ 処理b ↓ Aコミット といった感じなのですが、BストアドでコミットするとBストアドをCALLする前の処理aが コミットされてしまいます。 ここはBはBだけでコミットされてほしいのです。 独自で調べた限りでは、「トランザクションのネストはMySQLではできない」ということらしいのですが、 こういった場合、どのようにしたらよいのでしょうか。 もし方法があれば、ご教示のほどお願い致します。 -環境- [DB MySQL 5.0] [OS Windows XP]

    • ベストアンサー
    • MySQL
  • なぜtry{}catch(){}の中?

    DBへの更新を行う際に 私は try{ トランザクションスタート 処理 コミット }catch(Exception e){ ロールバック } の書き方をしていますが トランザクションスタート try{ 処理 コミット }catch(Exception e){ ロールバック } の書き方をしている人がいたので try{}catch(){}の中に トランザクションスタートを入れて下さいと伝えたところ なぜ?try{}catch(){}の中に入れるのか聞かれたのですが 答えられませんでした。 ネットにて色々なソースコードをみても try{}catch(){}の中に書かれているのでそういうモノとして 覚えているのですが、なぜ中なのでしょうか?

    • ベストアンサー
    • PHP
  • データベースの質問です。下記の四択について、どうい

    データベースの質問です。下記の四択について、どういうものか根拠を教えて下さい システム障害発生時には,データベースの整合性を保ち,かつ,最新の データベース状態に復旧する必要がある。このために,DBMSがトランザクション のコミット処理完了とみなすタイミングとして,適切なものはどれか。  ア アプリケーションの更新命令完了時点  イ チェックポイント処理完了時点  ウ ログバッファへのコミット情報書込み完了時点  エ ログファイルへのコミット情報書出し完了時点