ITパスポート 2024年 問74
問題文
トランザクション処理に関する記述のうち、適切なものはどれか。
選択肢
ア:コミットとは、トランザクションが正常に処理されなかったときに、データベースをトランザクション開始前の状態に戻すことである。
イ:排他制御とは、トランザクションが正常に処理されたときに、データベースの内容を確定させることである。
ウ:ロールバックとは、複数のトランザクションが同時に同一データを更新しようとしたときに、データの矛盾が起きないようにすることである。
エ:ログとは、データベースの更新履歴を記録したファイルのことである。(正解)
🔒 解説は解答すると表示されます
トランザクション処理に関する記述【ITパスポート 解説】
正解の理由
選択肢の中で正しいのは、データベースの更新履歴を記録したファイルについて述べた エ です。
「ログ」は英語で log(記録)を指し、データベースが行った更新(INSERT/UPDATE/DELETE など)やトランザクションの開始・終了といった履歴を時系列で残すファイルや領域のことです。ログは障害発生時の復旧や監査、あるいは「ロールフォワード(再実行)」や「アンザローリング(取り消し)」に使われます。これが選択肢の説明と一致するため エ が正解になります。
「ログ」は英語で log(記録)を指し、データベースが行った更新(INSERT/UPDATE/DELETE など)やトランザクションの開始・終了といった履歴を時系列で残すファイルや領域のことです。ログは障害発生時の復旧や監査、あるいは「ロールフォワード(再実行)」や「アンザローリング(取り消し)」に使われます。これが選択肢の説明と一致するため エ が正解になります。
(参考の簡単な定義)
- トランザクション:一連の処理をまとめて扱う単位。全部成功するか全部取り消すかを保証する。
- コミット(commit):トランザクションの変更を確定して永続化する操作。
- ロールバック(rollback):トランザクションの変更を取り消して開始前の状態に戻す操作。
- 排他制御(exclusive control):複数の処理が同時に同じデータを壊さないように調整する仕組み。
解法ステップ
- 各選択肢のキーワード(コミット、排他制御、ロールバック、ログ)を確認する。
- それぞれの用語の意味を思い出すか、短く定義して置き換える。
- 定義と選択肢の文を照らし合わせる。矛盾があれば不正解と判断する。
- ログの説明だけが用語の定義と一致するため、それを選ぶ。
この問題は用語の正しい意味を知っているかがポイントです。
選択肢別の誤答解説
-
ア: 「コミットとは、トランザクションが正常に処理されなかったときに、データベースをトランザクション開始前の状態に戻すことである。」
- 誤りです。コミット(commit)は正常に処理されたときに変更を確定する操作です。問題文の説明はロールバックの説明です。
-
イ: 「排他制御とは、トランザクションが正常に処理されたときに、データベースの内容を確定させることである。」
- 誤りです。排他制御(exclusive control)は、複数のトランザクションが同時に同一データを変更して整合性を壊さないようにする仕組み(例:ロック)です。文中の「データの確定」はコミットの説明です。
-
ウ: 「ロールバックとは、複数のトランザクションが同時に同一データを更新しようとしたときに、データの矛盾が起きないようにすることである。」
- 誤りです。ロールバック(rollback)は、トランザクションが途中で失敗したときに変更を取り消して開始前の状態に戻す操作です。文中の説明は排他制御の役割に近いです。
-
エ: 「ログとは、データベースの更新履歴を記録したファイルのことである。」
- 正しいです。ログは更新履歴を記録し、障害からの復旧や監査に用います。
(参考:SQL の簡単な例)
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 問題なければ
COMMIT;
-- 問題があれば
ROLLBACK;
この操作の一つひとつはログに記録されます。
よくある誤解
- コミットとロールバックを混同する
- コミットは「確定」。ロールバックは「取り消し」。逆に覚えていると誤答しやすいです。
- 排他制御を「処理の確定」と勘違いする
- 排他制御は「同時実行による矛盾防止」で、確定(commit)とは別の役割です。
- ログは単なる「監査用」だけだと思う
- ログは監査だけでなく、障害時の復旧(undo/redo)にも必須です。
補足コラム
トランザクションに関する基本概念として、よく「ACID(原則)」が出てきます。ACID は英語の頭文字です。
- Atomicity(原子性):トランザクションは「全部成功」か「全部失敗」のどちらか。
- Consistency(一貫性):トランザクション実行後もデータの整合性は保たれる。
- Isolation(独立性):同時実行が互いに干渉しないように見える。
- Durability(永続性):コミットされた変更は永続的に保存される。
ログの種類としては「undo(取り消し)ログ」と「redo(再実行)ログ」があります。多くのデータベースは「WAL(Write-Ahead Logging:先書きログ)」というルールを使い、実データを書き込む前にログに書き込むことで障害時の復旧を確実にしています。
FAQ
Q1: コミットした後でもロールバックできますか?
A1: 原則としてできません。コミットは変更を確定して永続化するため、通常は取り消せません。ただし、データベースの機能(ポイントインタイムリカバリやフラッシュバックなど)によっては特殊な復旧が可能な場合もあります。
A1: 原則としてできません。コミットは変更を確定して永続化するため、通常は取り消せません。ただし、データベースの機能(ポイントインタイムリカバリやフラッシュバックなど)によっては特殊な復旧が可能な場合もあります。
Q2: ログとバックアップは同じですか?
A2: 違います。ログは時系列の更新履歴、バックアップはデータのコピーです。復旧では両方を組み合わせて使うことが多いです(バックアップを復元してからログで追いつかせる)。
A2: 違います。ログは時系列の更新履歴、バックアップはデータのコピーです。復旧では両方を組み合わせて使うことが多いです(バックアップを復元してからログで追いつかせる)。
Q3: 排他制御はどうやって実現しますか?
A3: 一般に「ロック(lock)」という仕組みを使います。読み取り専用の共有ロックや、更新時の排他ロックなどがあります。また、トランザクション分離レベル(例:READ COMMITTED, SERIALIZABLE)で同時実行の挙動を調整します。
A3: 一般に「ロック(lock)」という仕組みを使います。読み取り専用の共有ロックや、更新時の排他ロックなどがあります。また、トランザクション分離レベル(例:READ COMMITTED, SERIALIZABLE)で同時実行の挙動を調整します。
関連キーワード: トランザクション、コミット、ロールバック、排他制御、ログ、ACID、WAL、データベース復旧、ロック、同時実行制御

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

