ホーム > データベーススペシャリスト試験 > 2024年

データベーススペシャリスト試験 2024年 午前212


二つのトランザクションが, 同じデータに対して, 更新, 参照を行うときに発生し得るダーティリードの事象を記述したものはどれか。
トランザクションAがある検索条件を満たすある表の行の集合を参照した。次に, トランザクションBがトランザクションAと同じ検索条件を満たす新しい行を挿入しコミットした。その後, トランザクションAが同じ検索条件で再度参照すると, 以前には存在しなかった行が出現した。
トランザクションAがある表の行の列を参照した。次に, トランザクションBがその列の値を更新しコミットした。その後, トランザクションAがその列を再度参照すると, 以前の値と異なった。
二つのトランザクションがそれぞれ2相ロックをかけ, デッドロックを起こした。
まだコミットしていないトランザクションAの更新後データをトランザクションBが参照した。その後, 更新後データはロールバックされた。(正解)

解説

ダーティリードとは何か?

データベースにおける**ダーティリード(Dirty Read)**とは、あるトランザクションが「まだコミットされていない別のトランザクションの更新済みデータ」を読み取ることを指します。これが問題となるのは、未確定のデータを参照することで、その後元のトランザクションがロールバック(更新の取り消し)した場合、読み取ったデータが誤っていたことになるためです。

選択肢ごとの内容とダーティリードとの関係

選択肢内容の要約ダーティリードか?理由
トランザクションAがある検索条件で行を参照 → Bが新しい行を挿入・コミット → Aが再参照で新行出現いいえトランザクションBの更新はコミット済みのため、Aが最新状態を見たに過ぎない。これを「不再現リード(Non-repeatable Read)」や「ファジリード(Phantom Read)」と呼ぶ。
Aが列の値を参照 → Bが更新しコミット → Aが再度参照し値が変わるいいえ同様にBの更新はコミット済み。Aが参照する内容が変わるのは正常。これも主に「不再現リード」の例。
二つのトランザクションが2相ロックをかけてデッドロック発生いいえこれはデータ競合やリソース競合の問題で、ダーティリードとは別の現象。
トランザクションAが更新してコミットしていないデータをBが参照 → 後にAがロールバックはいトランザクションBは「未コミットの更新データ」を読み取り、これがロールバックされたため誤ったデータを参照した。典型的なダーティリードの例。

詳しい解説:なぜ「エ」がダーティリードなのか

  • トランザクションAが更新したデータはまだ「コミットされていない」状態です。つまり、変更は確定しておらず、後で取り消される可能性があります。
  • トランザクションBがAの更新後の未コミットデータを参照したため、確定していない情報に基づいて処理を行いました。
  • その後、トランザクションAがロールバックし、更新内容が消えたため、トランザクションBが読んだデータは実際には存在しない「汚れた(dirty)」データだったことになります。
  • これにより、データの整合性が崩れ、予期しない結果を招く可能性が高くなります。

まとめ

  • ダーティリードが発生するのは未コミットのデータを他のトランザクションが参照した場合。
  • 選択肢「エ」はまさにこれを説明しており、ダーティリードの典型例となっています。
  • 他の選択肢はコミット済みのデータでの読み取りやロックの問題であり、ダーティリードとは異なります。

以上の理由から、「エ」がダーティリードを説明する正しい選択肢です。
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ