ホーム > データベーススペシャリスト試験 > 2024年
データベーススペシャリスト試験 2024年 午前2 問12
二つのトランザクションが, 同じデータに対して, 更新, 参照を行うときに発生し得るダーティリードの事象を記述したものはどれか。
ア:トランザクションAがある検索条件を満たすある表の行の集合を参照した。次に, トランザクションBがトランザクションAと同じ検索条件を満たす新しい行を挿入しコミットした。その後, トランザクションAが同じ検索条件で再度参照すると, 以前には存在しなかった行が出現した。
イ:トランザクションAがある表の行の列を参照した。次に, トランザクションBがその列の値を更新しコミットした。その後, トランザクションAがその列を再度参照すると, 以前の値と異なった。
ウ:二つのトランザクションがそれぞれ2相ロックをかけ, デッドロックを起こした。
エ:まだコミットしていないトランザクションAの更新後データをトランザクションBが参照した。その後, 更新後データはロールバックされた。(正解)
解説
ダーティリードとは何か?
データベースにおける**ダーティリード(Dirty Read)**とは、あるトランザクションが「まだコミットされていない別のトランザクションの更新済みデータ」を読み取ることを指します。これが問題となるのは、未確定のデータを参照することで、その後元のトランザクションがロールバック(更新の取り消し)した場合、読み取ったデータが誤っていたことになるためです。
選択肢ごとの内容とダーティリードとの関係
詳しい解説:なぜ「エ」がダーティリードなのか
- トランザクションAが更新したデータはまだ「コミットされていない」状態です。つまり、変更は確定しておらず、後で取り消される可能性があります。
- トランザクションBがAの更新後の未コミットデータを参照したため、確定していない情報に基づいて処理を行いました。
- その後、トランザクションAがロールバックし、更新内容が消えたため、トランザクションBが読んだデータは実際には存在しない「汚れた(dirty)」データだったことになります。
- これにより、データの整合性が崩れ、予期しない結果を招く可能性が高くなります。
まとめ
- ダーティリードが発生するのは未コミットのデータを他のトランザクションが参照した場合。
- 選択肢「エ」はまさにこれを説明しており、ダーティリードの典型例となっています。
- 他の選択肢はコミット済みのデータでの読み取りやロックの問題であり、ダーティリードとは異なります。
以上の理由から、「エ」がダーティリードを説明する正しい選択肢です。