平成26年度 春期 データベーススペシャリスト試験 午前Ⅱ 問14
テクノロジ/データベースデータベースのトランザクションT2の振る舞いのうち,ダーティリード(dirty read)に関する記述はどれか。
出典:平成26年度 春期 データベーススペシャリスト試験 午前Ⅱ 問14
- アトランザクションT1が行を検索し,トランザクションT2がその行を更新する。その後T1は先に読んだ行を更新する。その後にT2が同じ行を読んでも,先のT2による更新が反映されない値を得ることになる。
- イトランザクションT1が行を更新し,トランザクションT2がその行を検索する。その後T1がロールバックされると,T2はその行に存在しない値を読んだことになる。
- ウトランザクションT2がある条件を満たす行を検索しているときに,トランザクションT1がT2の検索条件を満たす行を挿入する。その後T2が同じ条件でもう一度検索を実行すると,前回は存在しなかった行を読むことになる。
- エトランザクションT2が行を検索し,トランザクションT1がその行を更新しコミットする。その後T2が同じ行を検索した場合,同じ行を読んだにもかかわらず,異なる値を得ることになる。
正解:イ
解説
ダーティリードとは,あるトランザクションが,まだコミットされていない(確定していない)他のトランザクションによる更新後のデータを読み取ってしまう事象である。その後,更新を行った側のトランザクションがロールバックされると,読み取った側のトランザクションは,実際にはデータベースに反映されなかった(存在しない)値を読んだことになる。
選択肢ごとの解説
- ア誤り。これは,一度読んだ行を再度読んだときに,他のトランザクションのコミット済みの更新が反映されず,古い値のままになっている事象であり,一般的なダーティリードの説明ではない(むしろ更新の見落としに関する説明であり,設問の主体であるT2がまだコミットされていないデータを読む状況とは異なる)。
- イ正しい。T1が行を更新し(未コミットの状態),T2がその未確定の更新後データを検索して読み取る。その後T1がロールバックされると,T2が読んだ値はデータベースに実際には存在しない(確定しなかった)値であったことになる。これはダーティリードそのものの説明である。
- ウ誤り。これは,一度の検索条件による参照の間に,他のトランザクションが挿入した行が新たに出現する事象であり,ファントムリード(幻読)と呼ばれる事象の説明である。
- エ誤り。これは,同じ行を2回検索する間に,他のトランザクションのコミット済みの更新によって値が変わってしまう事象であり,反復不能読取り(非再現読取り)と呼ばれる事象の説明である。