平成26年度 春期 データベーススペシャリスト試験 午前II 問14
【問題14】
データベースのトランザクション T2 の振る舞いのうち,ダーティリード(dirty read)に関する記述はどれか。
トランザクション T1 が行を検索し,トランザクション T2 がその行を更新する。その後 T1 は先に読んだ行を更新する。その後に T2 が同じ行を読んでも,先の T2 による更新が反映されない値を得ることになる。
トランザクション T1 が行を更新し,トランザクション T2 がその行を検索する。その後 T1 がロールバックされると,T2 はその行に存在しない値を読んだことになる。
トランザクション T2 がある条件を満たす行を検索しているときに,トランザクション T1 が T2 の検索条件を満たす行を挿入する。その後 T2 が同じ条件でもう一度検索を実行すると,前回は存在しなかった行を読むことになる。
トランザクション T2 が行を検索し,トランザクション T1 がその行を更新しコミットする。その後 T2 が同じ行を検索した場合,同じ行を読んだにもかかわらず,異なる値を得ることになる。
【解説】
ア: トランザクション T1 が行を検索し,トランザクション T2 がその行を更新する。その後 T1 は先に読んだ行を更新する。その後に T2 が同じ行を読んでも,先の T2 による更新が反映されない値を得ることになる。
誤り。これは「リードスケジューリング」に関する内容であり,ダーティリードではありません。
イ: トランザクション T1 が行を更新し,トランザクション T2 がその行を検索する。その後 T1 がロールバックされると,T2 はその行に存在しない値を読んだことになる。
正しい。ダーティリードとは,あるトランザクションが別のトランザクションによる未確定の(ロールバックされる可能性がある)データを読み取ることを指します。この場合が該当します。
ウ: トランザクション T2 がある条件を満たす行を検索しているときに,トランザクション T1 が T2 の検索条件を満たす行を挿入する。その後 T2 が同じ条件でもう一度検索を実行すると,前回は存在しなかった行を読むことになる。
誤り。これは「ファントムリード(phantom read)」に該当します。
エ: トランザクション T2 が行を検索し,トランザクション T1 がその行を更新しコミットする。その後 T2 が同じ行を検索した場合,同じ行を読んだにもかかわらず,異なる値を得ることになる。
誤り。これは「ノンリピータブルリード(non-repeatable read)」に該当します。
【答え】
イ: トランザクション T1 が行を更新し,トランザクション T2 がその行を検索する。その後 T1 がロールバックされると,T2 はその行に存在しない値を読んだことになる。
出典:平成26年度 春期 データベーススペシャリスト試験 午前II 問14