平成27年度 春期 データベーススペシャリスト試験 午前II 問16
【問題16】
二つのトランザクションが、同じデータに対して、更新、参照を行うときに発生し得るダーティリードの事象を記述したものはどれか。
トランザクションAがある検索条件を満たす表の行の集合を参照した。次に、トランザクションBがトランザクションAと同じ検索条件を満たす新しい行を挿入しコミットした。その後、トランザクションAが同じ検索条件で再度参照すると、以前には存在しなかった行が出現した。
トランザクションAがある表の行の列を参照した。次に、トランザクションBがその列の値を更新しコミットした。その後、トランザクションAがその列を再度参照すると、以前の値と異なった。
二つのトランザクションがそれぞれ2相ロックをかけ、デッドロックを起こした。
まだコミットしていないトランザクションAの更新後データをトランザクションBが参照した。その後、更新後データはロールバックされた。
【解説】
ダーティリードの説明
ダーティリードとは、あるトランザクションが、まだコミットされていない別のトランザクションの更新データを参照し、その後、更新元のトランザクションがロールバックされたため、不整合が発生する現象を指します。
各選択肢の検討
ア: トランザクションAがある検索条件を満たす表の行の集合を参照した。次に、トランザクションBがトランザクションAと同じ検索条件を満たす新しい行を挿入しコミットした。その後、トランザクションAが同じ検索条件で再度参照すると、以前には存在しなかった行が出現した。
誤り。これは「ファントムリード」と呼ばれる現象の記述です。新しく挿入されたデータが再度の参照で出現する例です。
イ: トランザクションAがある表の行の列を参照した。次に、トランザクションBがその列の値を更新しコミットした。その後、トランザクションAがその列を再度参照すると、以前の値と異なった。
誤り。これは「リピータブルリード(繰り返し読み取り)」が保証されない場合に発生する現象です。同じデータを再度参照した際に値が異なる例です。
ウ: 二つのトランザクションがそれぞれ2相ロックをかけ、デッドロックを起こした。
誤り。これは「デッドロック」の説明であり、ダーティリードではありません。
エ: まだコミットしていないトランザクションAの更新後データをトランザクションBが参照した。その後、更新後データはロールバックされた。
正しい。未コミットのデータを参照した後、そのデータがロールバックされることで不整合が生じるため、これはダーティリードの典型的な事象です。
【答え】
エ: まだコミットしていないトランザクションAの更新後データをトランザクションBが参照した。その後、更新後データはロールバックされた。
出典:平成27年度 春期 データベーススペシャリスト試験 午前II 問16