平成23年度 特別 午前Ⅱ 問15
トランザクション処理
ダーティリードに関する問題
データベースのトランザクション T2 の振る舞いのうち,ダーティリード(dirty read)に関する記述はどれか。
- アトランザクション T1 が行を検索し,トランザクション T2 がその行を更新する。その後 T1 は先に読んだ行を更新する。その後に T2 が同じ行を読んでも,先の T2 による更新が反映されない値を得ることになる。
- イトランザクション T1 が行を更新し,トランザクション T2 がその行を検索する。その後 T1 がロールバックされると,T2 はその行に存在しない値を読んだことになる。
- ウトランザクション T2 がある条件を満たす行を検索しているときに,トランザクション T1 が T2 の検索条件を満たす行を挿入する。その後 T2 が同じ条件でもう一度検索を実行すると,前回は存在しなかった行を読むことになる。
- エトランザクション T2 が行を検索し,トランザクション T1 がその行を更新する。その後 T2 が同じ行を検索した場合,同じ行を読んだにもかかわらず,異なる値を得ることになる。
答えと解説を見る
✓ これが正解イトランザクション T1 が行を更新し,トランザクション T2 がその行を検索する。その後 T1 がロールバックされると,T2 はその行に存在しない値を読んだことになる。
解説
後でロールバックされる未コミットの値を読むのがダーティリードです。
ダーティリードは、他のトランザクションがまだコミットしていない更新の値を読んでしまう現象です。T1 が行を更新し、コミット前にその行を T2 が読むと、T2 は T1 の途中の値を受け取ります。その後 T1 がロールバックされると、その値はデータベースのどこにも残らず、T2 は存在しなかった値をもとに処理を進めたことになります。見分ける軸は、読んだ値の元になった更新が確定していたかどうかです。同じ行を読み直して値が変わる現象や、同じ条件で読み直して行が増える現象とは別のものです。未確定の値を読む、読み直すと値が変わる、読み直すと行が増える、の三つを並べて区別しておくと整理できます。
ほかの選択肢はなぜ違うのか
- アトランザクション T1 が行を検索し,ト…:T2 の更新を T1 が上書きしてしまい、T2 自身の更新が消える流れです。T2 が読んだのは確定した値で、未確定の値を読んだわけではないので、ダーティリードにはあたりません。
- ウトランザクション T2 がある条件を満た…:同じ条件で検索し直したときに、前回は無かった行が現れるのは、ファントムリードの説明です。T2 が読んだのは確定した行で、行の増減が問題になっています。
- エトランザクション T2 が行を検索し,ト…:同じ行を読み直したら、間に T1 の更新が入って別の値になったという現象です。T2 が最初に読んだのは T1 が更新する前の確定した値なので、未確定の値を読むダーティリードではありません。
この問題の用語
- データベースたくさんのデータを決まった形で貯め、探したり書き換えたりできるようにした仕組み。多くの人が同時に使うことを前提にしています。
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:平成23年度 特別 データベーススペシャリスト試験 午前Ⅱ 問15
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問18:ブロックチェーンに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問17:デッドロックに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問16(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問15:隔離性水準に関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問14:べき等に関する問題(トランザクション)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)