最終更新日:2026年7月25日
fe fe-technology database
まず結論
ロールバックとは、トランザクションの途中で異常終了したとき、処理を取り消して開始前の状態に戻す処理です。
基本情報技術者試験では、次の対応を押さえると判断しやすいです。
ロールバック
→ 更新を取り消す
→ 更新前ログを使う
ロールフォワード
→ 更新をやり直して進める
→ 更新後ログを使う
データベース更新の途中で異常終了し、未コミットの処理を取り消す場合は、ログファイルの更新前情報を使ってロールバックします。
直感的な説明
ロールバックは、作業を途中でやめて、作業前の状態に戻すイメージです。
例えば、表計算ソフトで編集中に間違えたとき、元に戻す操作をします。
変更する
↓
途中で問題が起きる
↓
変更前の状態に戻す
これがロールバックの考え方です。
一方、ロールフォワードは、バックアップ時点から、ログに残っている更新内容を使って先へ進めるイメージです。
バックアップ時点に戻す
↓
その後の更新をログで再現する
↓
障害直前の状態へ近づける
つまり、ロールバックは 戻す、ロールフォワードは 進める と考えると分かりやすいです。
定義・仕組み
データベースでは、更新処理を安全に行うために、ログファイルに更新情報を記録します。
ログには、主に次のような情報があります。
| 情報 | 役割 |
|---|---|
| 更新前情報 | 更新する前の値。取り消しに使う |
| 更新後情報 | 更新した後の値。再実行に使う |
| トランザクション開始情報 | 処理が始まったことを示す |
| コミット情報 | 処理が正常に完了したことを示す |
ロールバックでは、更新を取り消す必要があります。
そのため、更新後の値ではなく、更新前の値を使います。
更新前:在庫 10
更新後:在庫 8
異常終了したので取り消す
↓
更新前の在庫 10 に戻す
ロールフォワードでは、バックアップ時点から更新を再現する必要があります。
そのため、更新後の値を使います。
バックアップ時点:在庫 10
更新後ログ:在庫 8
更新を再現する
↓
在庫 8 に進める
このテーマは、基本情報技術者試験の「データベース」や「トランザクション処理」と関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、障害回復に使う情報を選ぶ問題として出題されやすいです。
次の表現があれば、ロールバックを疑います。
| 問題文の表現 | 判断 |
|---|---|
| トランザクションの途中で異常終了 | ロールバック |
| 更新を取り消す | ロールバック |
| 開始直前の状態に戻す | ロールバック |
| 更新前情報を使う | ロールバック |
一方で、次の表現ならロールフォワードを疑います。
| 問題文の表現 | 判断 |
|---|---|
| データベースをバックアップから復元 | ロールフォワードの可能性 |
| バックアップ後の更新を反映する | ロールフォワード |
| 障害直前の状態へ近づける | ロールフォワード |
| 更新後情報を使う | ロールフォワード |
次の流れなら、更新を取り消すために ログファイルの更新前情報 を使います。
データベース更新の途中で異常終了
↓
ロールバックで復元
どんな場面で使う?
問題文では、トランザクションの途中で障害が起きたときに、どの処理を有効にするかを判断する場面があります。
例えば、次のような流れを考えます。
トランザクション開始
↓
データを更新
↓
異常終了
↓
コミットしていない
この場合、途中まで行った更新は確定していません。
そのため、更新を取り消して、開始前の状態に戻します。
未コミットの更新
↓
ロールバック
↓
更新前情報で戻す
一方で、すでにコミット済みの更新を、バックアップから復元したDBに反映したい場合は、ロールフォワードの考え方になります。
バックアップから復元
↓
コミット済み更新をログで反映
↓
更新後情報で進める
問題文では、まず 取り消すのか、再現するのか を読むのが大切です。
よくある誤解・混同
ロールバックとロールフォワードでよくある誤解は、どちらもログを使うので、更新前情報と更新後情報を混同してしまうこと です。
| 誤解 | 正しい理解 |
|---|---|
| ロールバックは更新後情報を使う | ロールバックは更新前情報を使う |
| ロールフォワードは更新前情報を使う | ロールフォワードは更新後情報を使う |
| バックアップファイルだけで常に最新状態に戻せる | バックアップ後の更新はログで補う必要がある |
| 異常終了した未コミット処理は反映する | 未コミット処理は取り消す |
| コミット済み更新も必ず取り消す | コミット済み更新は原則として有効にする |
試験では、次の切り分けを残しておくと強いです。
取り消す → ロールバック → 更新前情報
進める → ロールフォワード → 更新後情報
バックアップファイルやスナップショットは、ある時点の状態を戻すための情報です。
しかし、トランザクション途中の取り消しでは、更新前ログが重要になります。
まとめ(試験直前用)
- ロールバックは、未完了の更新を取り消して開始前に戻す処理
- ロールバックでは、ログファイルの更新前情報を使う
- ロールフォワードは、バックアップ後の更新をログで再現して進める処理
- ロールフォワードでは、ログファイルの更新後情報を使う
- 途中で異常終了した未コミット処理は取り消す
- バックアップから戻した後に進めるならロールフォワード
- 「取り消すなら更新前、進めるなら更新後」で判断する