ITパスポート 2021年 問62
問題文
金融システムの口座振替では、振替元の口座からの出金処理と振替先の口座への入金処理について、両方の処理が実行されるか、両方とも実行されないかのどちらかであることを保証することによってデータベースの整合性を保っている。データベースに対するこのような一連の処理をトランザクションとして扱い、矛盾なく処理が完了したときに、データベースの更新内容を確定することを何というか。
選択肢
ア:コミット(正解)
イ:スキーマ
ウ:ロールフォワード
エ:ロック
🔒 解説は解答すると表示されます
口座振替で更新内容を確定する操作は何か【ITパスポート 解説】
正解の理由
この問題は「振替元から出金し、振替先へ入金する一連の処理が『両方実行されるか、両方とも実行されないか』どちらかであることを保証する」点に注目します。こうした一連の処理をまとめて扱う仕組みは「トランザクション(transaction:データベースに対する一連の処理を一つの単位として扱うこと)」と呼びます。そのトランザクションの処理結果を確定して、データベースに永久に反映させる操作が ア のコミット(commit)です。コミットは「ここまでの変更を正式に確定する」という意味で、障害が起きてもその変更を永続化(残す)する働きがあります。したがって正解は ア です。
(用語補足)
- トランザクション:複数の処理をまとめて「全部成功する」か「全部なかったことにする」かを保証する仕組み。
- コミット(commit):トランザクションの変更を確定して永続化する操作。
解法ステップ
- 問題文のキーワードを探す:「両方実行されるか、両方とも実行されないか」→ トランザクションの性質(Atomicity:原子性)を示す。
- 選択肢の意味を一つずつ想起する。
- コミット:変更を確定する操作。
- スキーマ:データベースの構造(表の定義など)。
- ロールフォワード:ログを使って処理を前方適用する復旧手法(redo)。
- ロック:同時実行を制御するための排他制御。
- 「確定する」という表現からコミットが合致することを確認して選択する。
短時間で解くコツ:問題文の「確定する(更新内容を確定する)」という日本語を見たら、まずコミットを疑う。
選択肢別の誤答解説
-
ア:コミット
正しい選択肢です。トランザクションでの変更を確定し、データベースに永続化します。 -
イ:スキーマ(schema:データベースの構造)
テーブルの列や型など「データの設計・定義」を指します。処理を確定する操作ではないため不正解です。 -
ウ:ロールフォワード(rollforward:ログを使って更新を再適用する復旧方法)
障害発生後にログから変更を適用して最新状態に戻す(redo)処理のことです。更新を「確定する操作」ではなく、復旧手段なので不適切です。 -
エ:ロック(lock:同時実行制御の仕組み)
他の処理と競合しないように一時的にデータへのアクセスを制限する仕組みです。データを確定する(永続化する)操作ではありません。
よくある誤解
-
「ロックが確定を意味する」と考える誤解
ロックは同時実行時の整合性を守るための一時的な制御で、変更を永続化する操作(コミット)とは役割が異なります。ロックはコミットまで保持されることが多いですが、ロック自体が確定を行うわけではありません。 -
「ロールフォワード=確定操作」と混同する誤解
ロールフォワードは障害復旧でログから処理を再実行することで状態を戻す手段です。コミットは通常の処理中に「これで確定」とする操作で、目的が違います。 -
「スキーマ」が操作をするものと思う誤解
スキーマはデータ構造の設計図であり、処理の実行や確定をする機能ではありません。
補足コラム
トランザクションに関しては「ACID(アシッド)」という4つの重要な性質があります。初出のため簡単に説明します。
- A = Atomicity(原子性):一連の処理は全体で成功するか全体で失敗するかのどちらか。部分的な成功は認めない。
- C = Consistency(整合性):トランザクション実行前後でデータの整合性ルールが守られる。
- I = Isolation(独立性/分離性):同時に実行されるトランザクション同士が互いに悪影響を与えない。
- D = Durability(永続性/耐久性):コミットした変更は障害が起きても失われないようにする。
金融システムでは特に「原子性」と「耐久性」が重要です。銀行の振替処理では、途中で障害が起きると顧客のお金に関わる重大な問題になるため、コミットやログ、復旧機能が厳重に設計されています。分散環境(複数のデータベースやサーバーに跨る処理)では、二相コミット(2PC:Two-Phase Commit)のような仕組みで複数ノードのコミットを調整します。
FAQ
Q1. コミットとロールバックの違いは?
A1. コミットは「変更を確定して永久に反映する」操作です。ロールバック(rollback:取り消し)は「トランザクションの変更を取り消して元に戻す」操作です。成功時はコミット、失敗時や取り消す場合はロールバックを使います。
A1. コミットは「変更を確定して永久に反映する」操作です。ロールバック(rollback:取り消し)は「トランザクションの変更を取り消して元に戻す」操作です。成功時はコミット、失敗時や取り消す場合はロールバックを使います。
Q2. コミットした後に障害が起きたらどうなる?
A2. 通常はログ(書き込み先行ログ:WALなど)に変更が記録されているため、復旧時にログから変更を再適用してデータを回復します。これが耐久性の仕組みです。
A2. 通常はログ(書き込み先行ログ:WALなど)に変更が記録されているため、復旧時にログから変更を再適用してデータを回復します。これが耐久性の仕組みです。
Q3. ロックはいつ解除される?
A3. 多くのデータベースでは、トランザクションがコミットまたはロールバックされたタイミングで関連するロックが解除されます。
A3. 多くのデータベースでは、トランザクションがコミットまたはロールバックされたタイミングで関連するロックが解除されます。
関連キーワード: トランザクション、コミット、ロールバック、ACID、スキーマ、ロールフォワード、ロック、データベース整合性、耐久性、同時実行制御、障害復旧、二相コミット

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

