---
title: "ロールバックとロールフォワードとは？更新前ログ・更新後ログの違い【基本情報技術者試験】"
description: "ロールバックとロールフォワードを「取り消して戻す処理」と「バックアップ後の更新を再実行する処理」として整理し、更新前ログ、更新後ログ、バックアップファイルとの違いをFE試験向けに解説します。"
last_modified_at: "2026-07-25"
canonical_url: "https://stemtazoo.github.io/fe/rollback-rollforward/"
section: "fe"
---

## まず結論

ロールバックとは、**トランザクションの途中で異常終了したとき、処理を取り消して開始前の状態に戻す処理**です。

基本情報技術者試験では、次の対応を押さえると判断しやすいです。

```text
ロールバック
→ 更新を取り消す
→ 更新前ログを使う

ロールフォワード
→ 更新をやり直して進める
→ 更新後ログを使う
```

データベース更新の途中で異常終了し、未コミットの処理を取り消す場合は、**ログファイルの更新前情報**を使ってロールバックします。

## 直感的な説明

ロールバックは、作業を途中でやめて、作業前の状態に戻すイメージです。

例えば、表計算ソフトで編集中に間違えたとき、元に戻す操作をします。

```text
変更する
↓
途中で問題が起きる
↓
変更前の状態に戻す
```

これがロールバックの考え方です。

一方、ロールフォワードは、バックアップ時点から、ログに残っている更新内容を使って先へ進めるイメージです。

```text
バックアップ時点に戻す
↓
その後の更新をログで再現する
↓
障害直前の状態へ近づける
```

つまり、ロールバックは **戻す**、ロールフォワードは **進める** と考えると分かりやすいです。

## 定義・仕組み

データベースでは、更新処理を安全に行うために、ログファイルに更新情報を記録します。

ログには、主に次のような情報があります。

| 情報 | 役割 |
|---|---|
| 更新前情報 | 更新する前の値。取り消しに使う |
| 更新後情報 | 更新した後の値。再実行に使う |
| トランザクション開始情報 | 処理が始まったことを示す |
| コミット情報 | 処理が正常に完了したことを示す |

ロールバックでは、更新を取り消す必要があります。

そのため、更新後の値ではなく、更新前の値を使います。

```text
更新前：在庫 10
更新後：在庫 8

異常終了したので取り消す
↓
更新前の在庫 10 に戻す
```

ロールフォワードでは、バックアップ時点から更新を再現する必要があります。

そのため、更新後の値を使います。

```text
バックアップ時点：在庫 10
更新後ログ：在庫 8

更新を再現する
↓
在庫 8 に進める
```

このテーマは、基本情報技術者試験の「データベース」や「トランザクション処理」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、障害回復に使う情報を選ぶ問題として出題されやすいです。

次の表現があれば、ロールバックを疑います。

| 問題文の表現 | 判断 |
|---|---|
| トランザクションの途中で異常終了 | ロールバック |
| 更新を取り消す | ロールバック |
| 開始直前の状態に戻す | ロールバック |
| 更新前情報を使う | ロールバック |

一方で、次の表現ならロールフォワードを疑います。

| 問題文の表現 | 判断 |
|---|---|
| データベースをバックアップから復元 | ロールフォワードの可能性 |
| バックアップ後の更新を反映する | ロールフォワード |
| 障害直前の状態へ近づける | ロールフォワード |
| 更新後情報を使う | ロールフォワード |

次の流れなら、更新を取り消すために **ログファイルの更新前情報** を使います。

```text
データベース更新の途中で異常終了
↓
ロールバックで復元
```

## どんな場面で使う？

問題文では、トランザクションの途中で障害が起きたときに、どの処理を有効にするかを判断する場面があります。

例えば、次のような流れを考えます。

```text
トランザクション開始
↓
データを更新
↓
異常終了
↓
コミットしていない
```

この場合、途中まで行った更新は確定していません。

そのため、更新を取り消して、開始前の状態に戻します。

```text
未コミットの更新
↓
ロールバック
↓
更新前情報で戻す
```

一方で、すでにコミット済みの更新を、バックアップから復元したDBに反映したい場合は、ロールフォワードの考え方になります。

```text
バックアップから復元
↓
コミット済み更新をログで反映
↓
更新後情報で進める
```

問題文では、まず **取り消すのか、再現するのか** を読むのが大切です。

## よくある誤解・混同

ロールバックとロールフォワードでよくある誤解は、**どちらもログを使うので、更新前情報と更新後情報を混同してしまうこと** です。

| 誤解 | 正しい理解 |
|---|---|
| ロールバックは更新後情報を使う | ロールバックは更新前情報を使う |
| ロールフォワードは更新前情報を使う | ロールフォワードは更新後情報を使う |
| バックアップファイルだけで常に最新状態に戻せる | バックアップ後の更新はログで補う必要がある |
| 異常終了した未コミット処理は反映する | 未コミット処理は取り消す |
| コミット済み更新も必ず取り消す | コミット済み更新は原則として有効にする |

試験では、次の切り分けを残しておくと強いです。

```text
取り消す → ロールバック → 更新前情報
進める   → ロールフォワード → 更新後情報
```

バックアップファイルやスナップショットは、ある時点の状態を戻すための情報です。

しかし、トランザクション途中の取り消しでは、更新前ログが重要になります。

## まとめ（試験直前用）

- ロールバックは、未完了の更新を取り消して開始前に戻す処理
- ロールバックでは、ログファイルの更新前情報を使う
- ロールフォワードは、バックアップ後の更新をログで再現して進める処理
- ロールフォワードでは、ログファイルの更新後情報を使う
- 途中で異常終了した未コミット処理は取り消す
- バックアップから戻した後に進めるならロールフォワード
- 「取り消すなら更新前、進めるなら更新後」で判断する
