---
title: "データベースのロールフォワードとロールバックとは？媒体障害からの回復手順【基本情報技術者試験】"
description: "データベース障害時のリストア、ロールフォワード、ロールバックの違いを、バックアップ・トランザクションログ・コミット済みかどうかの判断軸でFE試験向けに解説します。"
last_modified_at: "2026-07-23"
canonical_url: "https://stemtazoo.github.io/fe/database-recovery-rollforward-rollback/"
section: "fe"
---

## まず結論

データベースの障害回復では、次の3つを切り分けることが大切です。

```text
リストア
→ バックアップからデータを戻す

ロールフォワード
→ コミット済みの更新を再反映する

ロールバック
→ 未コミットの更新を取り消す
```

基本情報技術者試験では、**バックアップ取得後にコミットした更新**なら、ロールフォワードの対象です。

## 直感的な説明

まず、バックアップを「途中まで保存しておいたセーブデータ」と考えます。

データベースに障害が起きたときは、そのセーブデータから戻します。これが **リストア** です。

```text
リストア
= restore
= バックアップから元の状態へ戻す
```

ただし、バックアップを取得したあとにも、正常に完了した更新があるかもしれません。

その更新まで戻すには、トランザクションログを使って、コミット済みの処理をもう一度反映します。これが **ロールフォワード** です。

一方、途中で失敗してコミットされていない更新は残してはいけません。その変更を取り消すのが **ロールバック** です。

## 定義・仕組み

### リストアとは

リストアとは、**バックアップからデータやシステムを元の状態へ戻す操作**です。

英語では `restore` と書き、「復元する」「元に戻す」という意味です。

```text
バックアップ
→ 退避しておいたコピー

リストア
→ そのコピーを使って戻す操作
```

例えば、毎日午前0時にデータベースをバックアップしている場合、午前10時に媒体障害が起きたら、まず午前0時時点のデータをリストアします。

ただし、この時点では午前0時から午前10時までの更新は戻っていません。

### ロールフォワードとは

ロールフォワードは、**更新後ログを使って、コミット済みの更新を再反映する処理**です。

```text
バックアップ時点から
↓
障害発生直前へ進める
```

そのため、「前へ進める回復」と考えると覚えやすいです。

### ロールバックとは

ロールバックは、**未コミットの更新を取り消し、トランザクション開始前の状態へ戻す処理**です。

```text
途中で失敗した更新
↓
なかったことにする
```

### トランザクションログの役割

トランザクションログには、データベースの更新内容が記録されます。

障害回復では、次のように使い分けます。

| 対象 | 操作 |
|---|---|
| コミット済みの更新 | ロールフォワード |
| 未コミットの更新 | ロールバック |

公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

## 科目Aでどう出る？

科目Aでは、障害の種類と回復手順を組み合わせて問われます。

### 媒体障害の基本手順

媒体障害とは、ディスクなどの記憶媒体そのものに障害が起きることです。

一般的な回復手順は、次のとおりです。

```text
1. 正常な媒体を用意する
2. バックアップをリストアする
3. バックアップ後のコミット済み更新をロールフォワードする
```

### 判断の中心はコミット済みかどうか

```text
コミット済み
→ 正常に確定した更新
→ ロールフォワード

未コミット
→ 途中で終わった更新
→ ロールバック
```

### 時系列で考える

例えば、次の状況を考えます。

```text
09:00 バックアップ取得
09:10 更新Aをコミット
09:20 更新Bをコミット
09:30 更新Cの途中で障害
```

回復手順は次のようになります。

```text
1. 09:00のバックアップをリストア
2. 更新Aをロールフォワード
3. 更新Bをロールフォワード
4. 更新Cは反映しない
```

試験では、次の順番で見ると迷いにくいです。

```text
1. 障害の種類を確認する
2. バックアップを使うか確認する
3. コミット済みか未コミットかを見る
4. ロールフォワードかロールバックかを決める
```

## どんな場面で使う？

これらの操作は、データベースを障害前の正しい状態へ戻すときに使います。

代表的な場面は次のとおりです。

- ディスク故障などの媒体障害
- トランザクション途中での異常終了
- システム停止後のデータベース再起動
- バックアップからの復旧

特に媒体障害では、バックアップだけでは最新状態まで戻せない場合があります。

```text
バックアップ
→ 保存した時点まで戻す

ログ
→ その後の正常な更新を戻す
```

この2つを組み合わせることで、障害直前に近い状態へ回復できます。

## よくある誤解・混同

### リストアとバックアップは同じ

誤りです。

```text
バックアップ
→ コピーを作って保存する

リストア
→ 保存したコピーを使って戻す
```

バックアップは事前の備え、リストアは障害後の復元操作です。

### ロールフォワードは全てのログを再実行する

誤りです。

未コミットの更新まで再反映してはいけません。

```text
コミット済み
→ 再反映する

未コミット
→ 再反映しない
```

### コミット済みの更新をロールバックする

通常の障害回復では誤りです。

コミット済みの更新は、正常に確定した処理です。媒体障害後は、むしろロールフォワードで再反映します。

### 媒体障害ではロールバックだけ行う

誤りです。

媒体障害では、まずバックアップをリストアし、その後のコミット済み更新をロールフォワードするのが中心です。

### ロールバックとリストアは同じ

違います。

```text
リストア
→ バックアップ全体から戻す

ロールバック
→ 特定の未完了トランザクションを取り消す
```

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

- バックアップは、データのコピーを保存すること
- リストアは、バックアップからデータを戻すこと
- ロールフォワードは、コミット済みの更新を再反映すること
- ロールバックは、未コミットの更新を取り消すこと
- 媒体障害では、まずバックアップをリストアする
- その後、バックアップ取得後のコミット済み更新をロールフォワードする
- `バックアップ後 + コミット済み = ロールフォワード` で切る
