トランザクション処理
このノートの問いがそのまま復習カードになり、忘れかけたころに出題されます。
シラバス Ver.6.5 の小分類 57「トランザクション処理」(大分類 9:技術要素/中分類 21:データベース)。
2026-08-05 にシラバス本文と突合済み。
0. 何を押さえるか
「途中で終わってはいけない処理」をどう守るかという話です。
口座 A から B へ振り込むとき、
「A から引く」と「B に足す」の片方だけが成立してはいけません。
この 2 つをまとめて 1 つの単位にしたものがトランザクションです。
最頻出は障害からの復旧 2 種です。名前が似ていて、向きが逆です。
| いつ使うか | どうする | |
|---|---|---|
| バックワードリカバリ(ロールバック) | 処理の途中で失敗した | 取り消して前に戻す |
| フォワードリカバリ(ロールフォワード) | 記憶装置が壊れた | バックアップから再現して進める |
戻すのがバックワード、進めるのがフォワード——語のとおりです。
1. トランザクションとは
根拠: シラバス 9-21-57
トランザクションとは?
分けられない 1 つのまとまりとして扱うべき、一連の処理
振込なら「A から引く」と「B に足す」で 1 トランザクション。
すべて成功するか、すべてなかったことにするかの
どちらかでなければならない(中途半端な状態を残さない)。
ACID 特性の 4 つとは?
| 意味 | |
|---|---|
| 原子性(Atomicity) | 全部実行されるか、全部取り消されるか |
| 一貫性(Consistency) | 処理の前後でデータの整合性が保たれる |
| 独立性(Isolation) | 同時に実行しても、互いに影響しない |
| 耐久性(Durability) | 完了した結果は障害が起きても失われない |
中途半端な状態を作らないための 4 条件。
2. 同時に実行するときの問題
根拠: シラバス 9-21-57
デッドロックとは? どう起きるか?
複数の処理が互いの資源の解放を待ち合い、どちらも進めなくなる状態
- 処理 A が資源 1 を確保し、資源 2 を待つ
- 処理 B が資源 2 を確保し、資源 1 を待つ
どちらも相手が離すのを待つので永久に進まない。
対策は、資源を確保する順序をあらかじめ統一すること。
起きてしまった場合は、片方を強制的に取り消す。
2 相コミットメントとは?
複数のデータベースにまたがる更新を、すべて成功かすべて取り消しにする仕組み
| 段階 | 何をするか |
|---|---|
| 第 1 相 | 各データベースに「準備できたか」を尋ねる |
| 第 2 相 | 全部が準備できていれば確定、1 つでも駄目なら全部取り消し |
先に全員の可否を確認してから確定するので、
一部だけ更新される事態を防げる。
3. 障害からの復旧
根拠: シラバス 9-21-57
バックワードリカバリとフォワードリカバリの違いは?
| いつ使うか | どうするか | |
|---|---|---|
| バックワードリカバリ(ロールバック) | トランザクションが途中で失敗した | 更新前の状態に戻す |
| フォワードリカバリ(ロールフォワード) | 記憶装置が壊れた | バックアップに更新後の記録を反映して進める |
戻すか進めるか。
どちらもログ(更新の記録)を使う——
戻すには更新前の値、進めるには更新後の値が要る。
チェックポイントとは? 何のためにあるか?
その時点までの更新内容を、記憶装置に確実に書き出す区切り
復旧するとき、チェックポイント以降のログだけを見ればよいので、
最初からすべてをやり直さずに済む。
復旧にかかる時間を短くするための仕組み。