平成27年度 春期 午前Ⅱ 問16
トランザクション処理
ダーティリードに関する問題
二つのトランザクションが,同じデータに対して,更新,参照を行うときに発生し得るダーティリードの事象を記述したものはどれか。
- アトランザクションAがある検索条件を満たすある表の行の集合を参照した。次に,トランザクションBがトランザクションAと同じ検索条件を満たす新しい行を挿入しコミットした。その後,トランザクションAが同じ検索条件で再度参照すると,以前には存在しなかった行が出現した。
- イトランザクションAがある表の行の列を参照した。次に,トランザクションBがその列の値を更新しコミットした。その後,トランザクションAがその列を再度参照すると,以前の値と異なった。
- ウ二つのトランザクションがそれぞれ2相ロックをかけ,デッドロックを起こした。
- エまだコミットしていないトランザクションAの更新後データをトランザクションBが参照した。その後,更新後データはロールバックされた。
答えと解説を見る
✓ これが正解エまだコミットしていないトランザクションAの更新後データをトランザクションBが参照した。その後,更新後データはロールバックされた。
解説
コミット前の更新を読み、その更新が取り消される事象がダーティリードです。
ダーティリードは、他のトランザクションがまだコミットしていない更新後のデータを読んでしまう事象です。読んだ値は、その後ロールバックされれば一度もデータベースに確定しなかった値になり、それを使った処理は誤った前提の上に成り立ちます。正解の記述では、トランザクションAのコミット前の更新後データをBが参照し、その後で更新がロールバックされているので、Bは確定しなかった値を読んだことになります。似た事象と見分けるには、読んだ相手の更新がコミット済みかどうかを見ます。コミット前の値を読むのがダーティリード、コミット済みの値の変化に出会うのは別の事象です。
ほかの選択肢はなぜ違うのか
- アトランザクションAがある検索条件を満たす…:同じ検索条件で読み直したときに、他のトランザクションがコミットした新しい行が現れる事象で、ファントムリードと呼ばれます。読んだ行はコミット済みなので、ダーティリードには当たりません。
- イトランザクションAがある表の行の列を参照…:同じ行の列を読み直したら、他のトランザクションがコミットした更新によって値が変わっていた事象です。コミット済みの値を読んでいる点が、コミット前の値を読む事象と異なります。
- ウ二つのトランザクションがそれぞれ2相ロッ…:二つのトランザクションが互いに相手のロックを待ち、どちらも進めなくなる状態はデッドロックです。データを読み取るときの不整合とは別の問題であり、ダーティリードの説明ではありません。
この問題の用語
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:平成27年度 春期 データベーススペシャリスト試験 午前Ⅱ 問16
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問18:ブロックチェーンに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問17:デッドロックに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問16(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問15:隔離性水準に関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問14:べき等に関する問題(トランザクション)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)