平成23年特別試験問題 午前Ⅱ 問15

データベースのトランザクションT2の振る舞いのうち,ダーティリード(dirty read)に関する記述はどれか。

  • トランザクションT1が行を検索し,トランザクションT2がその行を更新する。その後T1は先に読んだ行を更新する。その後にT2が同じ行を読んでも,先のT2による更新が反映されない値を得ることになる。
  • トランザクションT1が行を更新し,トランザクションT2がその行を検索する。その後T1がロールバックされると,T2はその行に存在しない値を読んだことになる。
  • トランザクションT2がある条件を満たす行を検索しているときに,トランザクションT1がT2の検索条件を満たす行を挿入する。その後T2が同じ条件でもう一度検索を実行すると,前回は存在しなかった行を読むことになる。
  • トランザクションT2が行を検索し,トランザクションT1がその行を更新する。その後T2が同じ行を検索した場合,同じ行を読んだにもかかわらず,異なる値を得ることになる。
正解 問題へ
分野:テクノロジ系
中分類:データベース
小分類:トランザクション処理
解説
ダーティリード(dirty read)とは、トランザクションの直列化可能性が保証されない状況において、他のトランザクションが更新したコミット前の値(ダーティデータ)を読み、その後更新処理を行ったトランザクションがロールバックされると、存在しない値を読み込んだことになってしまう異常をいいます。
  1. T1がデータを更新する
  2. T2が更新されたデータを読み込む
  3. T1がロールバックされる
  4. T2は存在しない値を読み込んだことになる
したがって正しい記述は「イ」です。

またトランザクションの直列化可能性が保証されないときにはダーティリードの他にもノンリピータブルリード、ファントムリード、ロストアップデートという異常が発生する可能性があります。
ノンリピータブルリード(再現不可能な読み)
同じトランザクションで複数回の読込みを行ったとき、読込む度に値が変わってしまう異常。2回の読込みの間に、別のトランザクションがそのデータを更新したことによって発生する。
ファントムリード
同じトランザクションで複数回の読込みを行ったとき、前回は存在しなかった行が現れる異常。2回の読込みの間に、別のトランザクションがテーブルに行を挿入したことによって発生する。
ロストアップデート(更新消失)
読書きを行うトランザクションが複数あるとき、一方のトランザクションの更新処理がなかったことになってしまう異常。最初のトランザクションで更新された値を、別のトランザクションが上書きしたことによって発生する。
  • ロストアップデートの説明です。
  • 正しい。ダーティリードの説明です。
  • ファントムリードの説明です。
  • ノンリピータブルリードの説明です。

この問題の出題歴


Pagetop