トランザクションの試験問題への適用

予約・販売・振替の事例で、まとめるべき処理と確定後の値を判断します。同時注文や外部通知も含め、どの性質がどの問題を防ぐかを整理します。

この単元で学ぶこと

  • 業務上の一まとまりからトランザクションの境界を決める
  • COMMITとROLLBACKを区別し、更新後の値を求める
  • ACIDの各性質と守る対象を説明する
  • 同時実行と障害復旧で必要な条件を見分ける

本文解説

振替を成功と失敗に分ける A8,000円とB2,000円から1,500円を移す例では、成功後は6,500円と3,500円です。Aだけ減らしてBの更新に失敗した場合は、同じトランザクション全体を取り消し、8,000円と2,000円へ戻します。他の更新はない前提です。合計値が変わらないことだけでなく、各口座の方向と金額も確認します。

二つの処理単位を混ぜない 在庫20個から4個減らすT1が確定し、その後3個減らすT2を取り消したなら残数は16個です。T2の取消しは、T1まで遡りません。一方、同じトランザクション内で4個と3個を減らし全体を取り消したなら20個です。数値計算の前に、確定の境界を紙に書くと対象を区別できます。

予約と座席の例 予約登録だけを確定し、座席の使用済み更新が失敗すると、予約と空席表示が食い違います。両方そろって成立する業務であれば、更新を同じ確定・取消しの単位へ含めます。これは原子性の問題です。画面を同時に切り替えるだけでは、データ更新の原子性を実現できません。

制約と一貫性の関係 会員番号の重複禁止や在庫非負など、維持したい条件を明確にします。DBの制約として表せるものは宣言し、業務上の確認も実装します。ACIDの一貫性は、すべての列を同じ値にする意味ではありません。定めた条件を満たす状態を維持することであり、業務規則を何も指定せずに正しさを判定できるという意味でもありません。

競合がある事例の読み方 在庫確認と減算の間に別の注文が入ると、確認時の値をそのまま信用できません。干渉の制御は独立性の論点です。DBMSの仕組みと更新方法に合わせて、条件判定と更新を組み合わせます。利用者が多いからといって処理を無条件に全部成功にすることが正しいわけではありません。

成功と表示するタイミング 更新がまだ確定していないのに成功を表示すると、直後の失敗で利用者の認識とDBの結果がずれます。コミットの成功を確認してから通知する設計が基本です。外部メールを先に送った場合、そのメールはDBの取消しで消えません。DBの外に出た操作は、別に成否の扱いを考えます。

障害後の保持とバックアップ 確定済みの売上を障害後に保持するのは耐久性の要件です。ログの永続化や復旧手順が必要ですが、保存先そのものを失えば別の保存先が必要になります。バックアップや冗長化を、想定する故障に合わせて用意します。ロックを取ったことは、失ったデータを復元できる証拠にはなりません。

操作の言葉を取り違えない コミットは確定、ロールバックは未確定更新の取消し、バックアップは復旧のための複製です。自動コミットで文ごとに確定していたら、あとから二つの文を一体として取り消せません。誤った確定結果を直す場合も、訂正内容の検査や記録が必要です。問題文の「確定済み」と「未確定」を見分けます。

図解

更新一式を確定するか取り消すか
外部メールや別サービスの操作は、DBの取消しで自動的には戻らない。

重要ポイント

  • 更新を一体にする範囲と、確定・取消しの境界を先に確認する。
  • ACIDは原子性・一貫性・独立性・耐久性で、守る対象が異なる。
  • 制約、競合制御、障害復旧、外部連携もそれぞれ設計する。

間違えやすい点

  • COMMIT済みの別トランザクションまでROLLBACKで戻ると考えない。
  • 原子性を、すべての命令が物理的に同時実行される意味にしない。
  • 単一DBの取消しで外部メールや決済も自動取消しされると考えない。

用語解説

トランザクション
関連する処理を一つの確定・取消しの単位として扱うもの。
コミット
トランザクションの更新を正常終了として確定する操作。
ロールバック
対象の未確定更新を取り消す操作。通常の全体取消しとセーブポイントへの部分取消しを区別する。
原子性
一式の更新を全部確定するか、全部取り消すかにそろえる性質。
一貫性
定めた整合性条件を満たす状態を処理の前後で維持する性質。
独立性
並行して進むトランザクション間の干渉を制御する性質。分離性ともいう。
耐久性
コミットした結果を後の障害でも保持する性質。永続性ともいう。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。