平成23年度 春期 データベーススペシャリスト試験 午前II 問15
【問題15】
データベースのトランザクション T2 の振る舞いのうち、ダーティリード(dirty read)に関する記述はどれか。
トランザクション T1 が行を検索し、トランザクション T2 がその行を更新する。その後 T1 は先に読んだ行を更新する。その後に T2 が同じ行を読んでも、先の T2 による更新が反映されない値を得ることになる。
トランザクション T1 が行を更新し、トランザクション T2 がその行を検索する。その後 T1 がロールバックされると、T2 はその行に存在しない値を読んだことになる。
トランザクション T2 がある条件を満たす行を検索しているときに、トランザクション T1 が T2 の検索条件を満たす行を挿入する。その後 T2 が同じ条件でもう一度検索を実行すると、前回は存在しなかった行を読むことになる。
トランザクション T2 が行を検索し、トランザクション T1 がその行を更新する。その後 T2 が同じ行を検索した場合、同じ行を読んだにもかかわらず、異なる値を得ることになる。
【解説】
ダーティリード(dirty read)とは、トランザクション T1 がデータを更新した後にコミットされる前の状態を、別のトランザクション T2 が読み取る現象を指します。その後、T1 がロールバックされた場合、T2 が読んだデータは無効な(汚れた)データになります。
ア: トランザクション T1 が行を検索し、トランザクション T2 がその行を更新する。その後 T1 は先に読んだ行を更新する。その後に T2 が同じ行を読んでも、先の T2 による更新が反映されない値を得ることになる。
誤り。この記述はダーティリードではなく、T2 が最新の更新を反映していないケース(リード不整合)です。
イ: トランザクション T1 が行を更新し、トランザクション T2 がその行を検索する。その後 T1 がロールバックされると、T2 はその行に存在しない値を読んだことになる。
正しい。T1 が更新を行ったが、コミットせずにロールバックした場合、T2 が読んだデータは無効であり、ダーティリードの説明に該当します。
ウ: トランザクション T2 がある条件を満たす行を検索しているときに、トランザクション T1 が T2 の検索条件を満たす行を挿入する。その後 T2 が同じ条件でもう一度検索を実行すると、前回は存在しなかった行を読むことになる。
誤り。この記述はファントムリード(phantom read)と呼ばれる現象です。
エ: トランザクション T2 が行を検索し、トランザクション T1 がその行を更新する。その後 T2 が同じ行を検索した場合、同じ行を読んだにもかかわらず、異なる値を得ることになる。
誤り。この記述はリピータブルリード(repeatable read)に関する問題です。
【答え】
イ: トランザクション T1 が行を更新し、トランザクション T2 がその行を検索する。その後 T1 がロールバックされると、T2 はその行に存在しない値を読んだことになる。
出典:平成23年度 春期 データベーススペシャリスト試験 午前II 問15