情報セキュリティマネジメント 2019年 秋期 午前(科目A) 問46
問題文
データベースのトランザクションに関する記述のうち、適切なものはどれか。
選択肢
ア:他のトランザクションにデータを更新されないようにするために、テーブルに対するロックをアプリケーションプログラムが解放した。
イ:トランザクション障害が発生したので、異常終了したトランザクションをDBMSがロールフォワードした。
ウ:トランザクションの更新結果を確定するために、トランザクションをアプリケーションプログラムがロールバックした。
エ:複数のトランザクション間でデッドロックが発生したので、トランザクションをDBMSがロールバックした。(正解)
🔒 解説は解答すると表示されます
トランザクション回復処理【情報セキュリティマネジメント解説】
正解の理由
トランザクション(複数の処理を一つのまとまりとして扱う動作単位)の管理はDBMS(Database Management System:データベース管理システム)が行います。複数のトランザクションが互いに資源(例:行やテーブルのロック)を待って進まなくなる状態をデッドロックと呼びます。DBMSはこれを検出すると、片方のトランザクションを強制終了して影響を取り消す(ロールバック:実行前の状態に戻す)ことで他を進めます。したがって、選択肢のうち正しいのは エ です。
(ポイント)
- DBMSがデッドロック解消のためにロールバックを行うのは標準的な動作です。
- ロールバックは「取り消し」、ロールフォワードは「ログから変更を再適用すること」で役割が異なります。
解法ステップ
- 各選択肢からキーワードを抽出する(ロック解放、ロールフォワード、ロールバック、DBMS/アプリ)。
- 用語の意味を確認する:
- ロックは誰が管理するか(DBMSが通常管理)。
- ロールバック=取り消し、ロールフォワード=ログの再適用。
- 「誰が実行するか(アプリかDBMSか)」と「その処理の目的(確定・取り消し・回復)」を照合する。
- 矛盾する組合せ(例:アプリがロック解放して他トランザクションを防ぐなど)を除外する。
- デッドロック時にDBMSがロールバックする点で エ を選ぶ。
選択肢別の誤答解説
-
ア: 「テーブルに対するロックをアプリケーションプログラムが解放した」
- 誤り。ロック(排他制御)は通常DBMSが自動で管理します。アプリが勝手に解放すると整合性が崩れるため、アプリ任せにしません。アプリはトランザクションの開始・終了は指示できますが、実際の細かいロック制御はDBMSの責任です。
-
イ: 「異常終了したトランザクションをDBMSがロールフォワードした」
- 誤り。ロールフォワード(redo)はバックアップから復旧する際にログを適用して進める操作で、主にシステム全体の復旧に用います。一方、異常終了した(未コミットの)個別トランザクションはDBMSがロールバック(undo)して取り消すのが通常です。
-
ウ: 「トランザクションの更新結果を確定するために、トランザクションをアプリケーションプログラムがロールバックした」
- 誤り。更新結果を確定する操作はコミット(commit)です。ロールバックは確定の逆で、更新を取り消します。アプリがロールバックすると確定はされません。
-
エ: 「複数のトランザクション間でデッドロックが発生したので、トランザクションをDBMSがロールバックした」
- 正しい。デッドロック解消のためにDBMSが一方を強制的にロールバックするのが標準的な対応です。
よくある誤解
- 「ロールフォワードとロールバックは同じ操作だ」
- 異なります。ロールバック(undo)は変更を取り消すこと、ロールフォワード(redo)はログを使って変更を再適用することです。目的とタイミングが違います。
- 「アプリがロックを管理すべきだ」
- 実務ではアプリはトランザクションの開始・終了を指示しますが、細かなロック管理はDBMSに任せます。手動でロック操作すると不整合やデッドロックを招きやすいです。
補足コラム
- ACID特性:トランザクションは一般にACID(Atomicity:原子性、Consistency:一貫性、Isolation:独立性、Durability:永続性)を満たすことが望まれます。ロールバックは「Atomicity(原子性)」を確保するための機能です。
- 実務イメージ:経理システムで同じ売上データを同時に更新しようとして、処理がぶつかり先に進めない場合、DBMSが一方を取り消して他方を通す、といった挙動です。運用ではログ取得や定期バックアップ、デッドロック検出の設定を確認しておきます。
FAQ
Q1: ロールバックは誰でも実行できますか?
A1: アプリケーションから「ロールバック命令」を出すことはできますが、DBMSが実際に取り消し処理(undo)を行います。またDBMSは内部で強制ロールバックも行えます(デッドロック時など)。
A1: アプリケーションから「ロールバック命令」を出すことはできますが、DBMSが実際に取り消し処理(undo)を行います。またDBMSは内部で強制ロールバックも行えます(デッドロック時など)。
Q2: デッドロックが起きたら必ず片方がロールバックされるのですか?
A2: 多くのDBMSはデッドロック検出後に一方(通常コストや優先度が低い方)をロールバックして解消します。ただし、設定や実装によって異なる場合もあります。
A2: 多くのDBMSはデッドロック検出後に一方(通常コストや優先度が低い方)をロールバックして解消します。ただし、設定や実装によって異なる場合もあります。
Q3: ロールフォワードは日常的に使うものですか?
A3: 通常は障害後の復旧作業で使います。日常運用での個別トランザクション制御にはあまり関係しません。
A3: 通常は障害後の復旧作業で使います。日常運用での個別トランザクション制御にはあまり関係しません。
関連キーワード: トランザクション、ロールバック、ロールフォワード、デッドロック、DBMS、排他制御、ACID、障害復旧、整合性、コミット

\ せっかくなら /
情報セキュリティマネジメントを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

