ITパスポート 2018年 秋期 問63
問題文
トランザクション処理におけるロールバックの説明として、適切なものはどれか。
選択肢
ア:あるトランザクションが共有データを更新しようとしたとき、そのデータに対する他のトランザクションからの更新を禁止すること
イ:トランザクションが正常に処理されたときに、データベースへの更新を確定させること
ウ:何らかの理由で、トランザクションが正常に処理されなかったときに、データベースをトランザクション開始前の状態にすること(正解)
エ:複数の表を、互いに関係付ける列をキーとして、一つの表にすること
🔒 解説は解答すると表示されます
トランザクション処理におけるロールバックの説明【ITパスポート 解説】
正解の理由
選択肢ウは「何らかの理由で、トランザクションが正常に処理されなかったときに、データベースをトランザクション開始前の状態にすること」と説明しています。
ここでのポイントは「元に戻す(取り消す)」という動作です。これがロールバック(rollback)です。トランザクションとは「一連の処理のまとまり」で、途中で失敗したときに途中状態を残さず、開始前の状態に戻す性質(原子性:Atomicity)を守るためにロールバックが使われます。銀行の振替処理で片方の口座から引き落としが成功して、もう片方の口座への入金で失敗した場合、両方を元に戻すことで不整合を防ぎます。これがロールバックの典型的な使い方です。
ここでのポイントは「元に戻す(取り消す)」という動作です。これがロールバック(rollback)です。トランザクションとは「一連の処理のまとまり」で、途中で失敗したときに途中状態を残さず、開始前の状態に戻す性質(原子性:Atomicity)を守るためにロールバックが使われます。銀行の振替処理で片方の口座から引き落としが成功して、もう片方の口座への入金で失敗した場合、両方を元に戻すことで不整合を防ぎます。これがロールバックの典型的な使い方です。
解法ステップ
- 問題文のキーワードを探す:「正常に処理されなかった」「開始前の状態にする」→ これは「元に戻す」動作を示す。
- 選択肢の意味を割り当てる:
- ロールバックは「取り消す(戻す)」→ 該当する選択肢を探す。
- 「確定させる」はコミット(commit)。
- 「他のトランザクションからの更新を禁止する」は排他制御(ロック)。
- 「複数の表を一つにする」は結合(JOIN)。
- 該当するものを選ぶ:上記の手順で「開始前に戻す」という説明がある選択肢が正しい(ウ)。
短い目印:
- 「確定・永続」はコミット(commit)→ イに対応。
- 「戻す・取り消す・開始前に戻す」はロールバック→ ウ。
- 「禁止・ロック」は排他制御→ ア。
- 「表を一つにする」は結合(JOIN)→ エ。
選択肢別の誤答解説
- ア: 「あるトランザクションが共有データを更新しようとしたとき、そのデータに対する他のトランザクションからの更新を禁止すること」
→ これは排他制御(ロック、例:排他ロック)の説明です。ロールバックではなく、同時更新を防いで整合性を保つ仕組みを指します。 - イ: 「トランザクションが正常に処理されたときに、データベースへの更新を確定させること」
→ これはコミット(commit:確定)です。成功した変更を確定して永続化する操作で、ロールバックの逆の動作です。 - ウ: 「何らかの理由で、トランザクションが正常に処理されなかったときに、データベースをトランザクション開始前の状態にすること」
→ これがロールバック(rollback)の正しい説明です。失敗時に変更を取り消して不整合を防ぎます。 - エ: 「複数の表を、互いに関係付ける列をキーとして、一つの表にすること」
→ これは表の結合(JOIN)の説明です。SQLの操作であり、ロールバックとは無関係です。
よくある誤解
- 「ロールバックは部分的に戻せる」と思う誤解
- 基本のトランザクションでは「全て戻すか全て反映するか(全部か無か)」が原則です(原子性)。ただし、途中まで戻す機能としてセーブポイント(SAVEPOINT)がある点は別扱いです。
- 「ロールバックすると変更が残る(永続化される)」と思う誤解
- ロールバックは変更を取り消す操作です。コミットして永続化された後は通常ロールバックできません(バックアップやリカバリが必要)。
- 「ロールバック = ロック(排他制御)」と混同する誤解
- ロールバックは取り消し、ロックは同時実行制御です。目的と動作が異なります。
補足コラム
- ACID(エーシッド)とは:トランザクションの4つの性質を示す頭字語です。
- Atomicity(原子性):処理は全体が成功するか全体を取り消すか。
- Consistency(整合性):データは一貫した状態を保つ。
- Isolation(独立性):並行実行が互いに影響しない。
- Durability(永続性):コミットされた変更は永続的に保存される。
- SQL(Structured Query Language:構造化問合せ言語)での基本操作例:
BEGIN TRANSACTION; -- トランザクション開始 UPDATE account SET balance = balance - 100 WHERE id = 1; -- 引き落とし UPDATE account SET balance = balance + 100 WHERE id = 2; -- 入金 -- 途中でエラーがあれば ROLLBACK; -- 変更を取り消す(ロールバック) -- 全て問題なければ COMMIT; -- 変更を確定する(コミット) - セーブポイント(SAVEPOINT):長いトランザクションで一部分だけ戻したいときに使える機能。セーブポイントを作っておくと、その点までロールバックできます(部分的ロールバック)。
FAQ
Q1. ロールバックはいつ使うのですか?
A1. トランザクションの処理中にエラーや異常が発生したときに使います。処理の一部だけ反映されてデータ不整合が起きるのを防ぐためです。
A1. トランザクションの処理中にエラーや異常が発生したときに使います。処理の一部だけ反映されてデータ不整合が起きるのを防ぐためです。
Q2. コミットした後にロールバックできますか?
A2. 通常はできません。コミットで変更が永続化されるため、元に戻すには別の手段(バックアップ復元や補償処理)が必要です。
A2. 通常はできません。コミットで変更が永続化されるため、元に戻すには別の手段(バックアップ復元や補償処理)が必要です。
Q3. ロールバックは自動で実行されますか?
A3. 多くのシステムではエラー検出時に自動でロールバックする設定がありますが、アプリケーション側で明示的にROLLBACKを呼ぶこともあります。
A3. 多くのシステムではエラー検出時に自動でロールバックする設定がありますが、アプリケーション側で明示的にROLLBACKを呼ぶこともあります。
関連キーワード: トランザクション、ロールバック、コミット、排他制御(ロック)、結合(JOIN)、ACID、整合性、セーブポイント、SQL、トランザクション分離レベル

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

