情報処理試験を勉強していると、「ロールバックとロールフォワードの違いがごっちゃになる…」という声を本当によく聞きます。

この記事では、ロールバックの意味・仕組み・試験での出題パターンを一気に整理します。

対象試験と出題頻度

ロールバックは、ITパスポート・基本情報技術者・応用情報技術者のいずれでも出題されるテーマです。

DBMSの障害回復機能として、ロールフォワードとセットで問われるのが定番です。

詳細をクリックして確認
対象試験:
ITパスポート
基本情報技術者
応用情報技術者
出題頻度:
★★★★☆
ランクA(重要)必ず覚えておくべき

用語の定義

ロールバック(Rollback)とは、一言で言うと

 「トランザクションが異常終了したとき、更新前ログを使ってデータベースをトランザクション開始直前の状態に戻す処理

のことです。日本語では「後退復帰」とも呼ばれます。

イメージとしては、書き間違えたときに消しゴムで全部消して白紙に戻す動作です。

テスト用紙に途中まで答えを書いていたけれど、途中で計算ミスに気づいた。

消しゴムで全部消して、何も書いていなかった状態に戻す。――これがロールバックの考え方です。「途中まで書いた答え」を残さず、きれいさっぱり元に戻す点がポイントです。

📊 ロールバックの基本情報

項目 内容
英語名 Rollback
日本語別名 後退復帰
使用するログ 更新前ログ(更新前ジャーナル)
復元先の状態 トランザクション開始直前
対になる用語 ロールフォワード(前進復帰)

解説

なぜロールバックが必要なのか

データベースのトランザクションには「原子性(Atomicity)」という性質があります。

これは「処理がすべて完了するか、まったく実行されなかったかのどちらかで終わる」というルールです。

たとえば銀行の振込処理では、「送金元の残高を減らす」と「送金先の残高を増やす」の2つの更新が1セットです。

片方だけ実行されてもう片方が失敗すると、お金が消失または二重に増える矛盾が起きます。

この矛盾を防ぐために、途中で異常が起きた場合は更新前ログを使って開始前の状態に巻き戻す仕組みが用意されています。これがロールバックの存在理由です。

動作の流れ

具体的にどのような手順で復元されるのかを図解で確認してください。

ロールバックの動作フロー ― 銀行振込の例

1

トランザクション開始

「Aさん → Bさんへ5万円振込」という一連の処理をスタート。

この時点のDB状態 → Aさん: 10万円 / Bさん: 3万円
2

DBMSが更新前ログを記録

データを書き換える前に、「Aさんは10万円、Bさんは3万円だった」という情報をログファイルに保存する。これが更新前ログ(更新前ジャーナル)

📝 ログに記録 → Aさん: 10万円 / Bさん: 3万円(更新前)
3

データベースを更新(処理の途中)

Aさんの残高を10万円 → 5万円に減額。ここまでは成功。
次にBさんの残高を3万円 → 8万円に増額するはずだった。

DB途中状態 → Aさん: 5万円 / Bさん: 3万円(まだ増えていない)
4

⚠ 異常終了(COMMIT前に障害発生)

Bさんの残高を更新する前にプログラムがクラッシュ。
このままだとAさんの5万円だけ消えた矛盾状態になってしまう。

⚠ 矛盾状態 → Aさん: 5万円 / Bさん: 3万円(合計が5万円減っている)
5

🔄 ロールバック実行

ステップ2で記録しておいた更新前ログを読み込み、Aさんの残高を10万円に復元する。
トランザクション開始直前の状態に完全に巻き戻る。

✅ 復元完了 → Aさん: 10万円 / Bさん: 3万円(元どおり)

各ステップのDB状態まとめ

Step 処理内容 Aさん残高 Bさん残高 合計(整合性)
1 トランザクション開始 10万円 3万円 13万円 ✅
3 Aさんだけ更新済み 5万円 3万円 8万円 ⚠ 不整合
5 ロールバック完了 10万円 3万円 13万円 ✅ 復元

▲ ステップ3の不整合状態を放置しないために、ステップ5で更新前ログを使って巻き戻す

ここだけは確実に押さえてください。

ロールバックが使うのは「更新前ログ」であり、戻す先は「トランザクション開始直前」です。

更新後ログを使うのはロールフォワードのほうです。

ロールフォワードとの比較

混同しやすいロールフォワード(前進復帰)との違いを整理します。

比較項目 ロールバック(後退復帰) ロールフォワード(前進復帰)
対象 COMMIT前に異常終了したトランザクション COMMIT済みだがディスク反映前に障害が起きたトランザクション
使用するログ 更新前ログ 更新後ログ
復元方向 過去に戻す(開始直前へ) 先に進める(障害直前へ)
日常の例え 消しゴムで全部消して白紙に戻す 下書きメモを見て答案を書き直す

チェックポイント法における復旧イメージ

← 過去 未来 →
チェックポイント 障害発生
T1
COMMIT✓
復旧不要
T2
COMMIT✓
ロールフォワード
T3
未COMMIT ✗
ロールバック

判定ロジック:COMMIT済みかどうかで決まる

T1 チェックポイントにCOMMIT済み → ディスク反映済みなので何もしなくてよい
T2 チェックポイントにCOMMIT済み → ディスク未反映の可能性あり → 更新後ログで再現(ロールフォワード)
T3 障害時点でまだ未COMMIT → 中途半端な更新が残っている → 更新前ログで巻き戻す(ロールバック)

※ 復旧操作はCOMMIT済みかどうかで分かれる。チェックポイントとの前後関係もあわせて確認する

では、この用語が試験でどのように出題されるか見ていきましょう。

💡 ロールバックの核心を3行で

・COMMIT前に異常終了したトランザクションを巻き戻す処理
・使うのは「更新前ログ」、戻す先は「トランザクション開始直前」
・ロールフォワードとの違いは「ログの種類」と「復元方向」


試験ではこう出る!

ロールバックは、IP・FE・APいずれの午前問題でも繰り返し出題されています。出題パターンは主に2つです。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
IP H30秋
問63
ロールバックの説明として適切なものを選ぶ問題 ・「正常に処理されなかったとき、開始前の状態に戻す」が正解
・排他制御・コミット・結合演算の説明がひっかけ
FE H29秋
問30
ロールバック処理で使用する情報を選ぶ問題 ・「ログファイルの更新前情報」が正解
・スナップショット・バックアップ・更新後情報がひっかけ
FE H22秋
問56
ロールバック処理の説明を選ぶ問題 ・「更新前ジャーナル」+「開始直前の状態」の組合せが正解
・更新後ジャーナルとの組合せがひっかけ
AP H28秋
問30
ロールフォワードとロールバックの対象トランザクションの組合せを選ぶ問題 ・COMMIT済みかどうかで振り分ける
・書込みがないトランザクションはロールバック不要

📝 IPA試験での出題パターン

パターン1:「ロールバックの説明を選べ」
4つの説明文が並び、ロールバックに該当するものを選ぶ形式。ひっかけとして「コミット(更新の確定)」「排他制御(他のトランザクションの更新禁止)」の説明が紛れ込む。キーワードは「更新前ログ」「開始直前」。

 

パターン2:「チェックポイント法でどのトランザクションをロールバックするか」
タイムライン上にチェックポイント・障害発生時点・各トランザクションが描かれ、ロールフォワード対象とロールバック対象を振り分ける問題。COMMIT済みかどうかだけで判断すればOKです。深追いは不要です。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. データベースのロールバック処理の説明として、最も適切なものはどれでしょうか?

  • A. バックアップファイルと更新後ログを用いて、障害発生直前の状態までデータベースを復旧させる処理である。
  • B. 更新前ログを用いて、コミットされていないトランザクションをトランザクション開始直前の状態に戻す処理である。
  • C. トランザクションが正常に完了した時点で、データベースへの更新内容を確定させる処理である。

正解と解説を見る

正解:B

解説:
ロールバックは、COMMIT前に異常終了したトランザクションについて、更新前ログ(更新前ジャーナル)を使ってデータベースをトランザクション開始直前の状態に巻き戻す処理です。

選択肢Aはロールフォワード(前進復帰)の説明です。ロールフォワードは更新後ログを使い、COMMIT済みトランザクションを障害直前の状態まで再現する処理であり、復元方向が逆です。選択肢Cはコミット(COMMIT)の説明です。コミットはトランザクションの更新を確定する操作であり、復旧処理ではありません。


よくある質問(FAQ)

Q. SQLで手動でロールバックすることはできますか?

できます。SQLにはROLLBACK文が用意されており、トランザクション中にCOMMIT前であればいつでも手動で実行できます。実務では、テスト環境で更新内容を確認してから確定(COMMIT)するか取消し(ROLLBACK)するかを判断する使い方が一般的です。

Q. COMMIT後にロールバックで元に戻すことはできますか?

できません。COMMITが完了した時点でデータベースの更新は確定しており、ロールバックの対象外です。COMMIT後に誤りに気づいた場合は、正しい値に更新するUPDATE文を実行するか、バックアップから復旧する必要があります。

Q. ロールバックとロールフォワードは同時に実行されることがありますか?

あります。システム障害からの復旧時、チェックポイント法を使うDBMSでは、COMMIT済みのトランザクションにはロールフォワードを、未COMMITのトランザクションにはロールバックを、それぞれ適用します。AP H28秋 問30はまさにこの両方の振り分けを問う問題でした。

Q. ACID特性の中でロールバックが関係するのはどの性質ですか?

原子性(Atomicity)です。「すべて完了するか、まったく実行されなかったかのどちらかで終わる」という性質を実現するために、異常終了時にロールバックで更新をなかったことにします。ACID特性全体の詳細はDBMSの解説記事で確認できます。