DBデータベーススペシャリスト試験 午前Ⅱ

平成27年度春期 データベーススペシャリスト 午前Ⅱ 問16

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

二つのトランザクションが,同じデータに対して,更新,参照を行うときに発生し得るダーティリードの事象を記述したものはどれか。

選択肢

  1. ア
    トランザクションAがある検索条件を満たすある表の行の集合を参照した。次に,トランザクションBがトランザクションAと同じ検索条件を満たす新しい行を挿入しコミットした。その後,トランザクションAが同じ検索条件で再度参照すると,以前には存在しなかった行が出現した。
  2. イ
    トランザクションAがある表の行の列を参照した。次に,トランザクションBがその列の値を更新しコミットした。その後,トランザクションAがその列を再度参照すると,以前の値と異なった。
  3. ウ
    二つのトランザクションがそれぞれ2相ロックをかけ,デッドロックを起こした。
  4. エ
    まだコミットしていないトランザクションAの更新後データをトランザクションBが参照した。その後,更新後データはロールバックされた。
解き方のヒントを見る

トランザクション境界の見極め

この種の設問では、処理をどこからどこまで一つの単位として捉えるかに注目します。途中状態と完了後の状態を分け、整合性を評価する対象の範囲を整理しましょう。境界の置き方が判断の前提になります。

この問題で問われていること

確認する観点は、関連する更新や参照を同じ処理単位として扱う範囲です。開始前・処理中・終了後のどの時点を比較するのかを整理し、整合性を考える対象を一つに絞ってください。

視点

トランザクション境界を考えるときは、処理のまとまり、状態を観察する時点、整合性を評価する対象を切り分けます。各操作の関係を時系列で整理すると、検討すべき範囲が明確になります。

確認ポイント

  • 一つの処理単位に含める操作の範囲を整理する
  • 状態を比較する時点と対象データを切り分ける
  • 境界の前後で整合性を確認する観点をメモする
正解と解説を見る

正解

エ

解説

ダーティリードとは、あるトランザクションがまだコミットしていない別のトランザクションの更新結果を読み取る現象です。その更新が後でロールバックされると、確定しなかったデータを参照したことになります。

理由

エは、トランザクションAがコミットしていない更新後データをトランザクションBが参照し、その後にAの更新がロールバックされたと述べています。未確定の更新結果を読み取っているため、ダーティリードに該当します。

比較

アは同じ検索を再実行した際に新しい行が現れるファントムリード、イは確定済み更新によって再参照時の値が変わる非反復読取りです。ウはロック取得の順序によって発生するデッドロックで、読み取り現象ではありません。

選択肢ア

これは不正解だよ。検索条件に合う新しい行を別のトランザクションが挿入してコミットし、その後の再検索で現れたという内容です。これは検索結果の集合が変化するファントムリードの説明であり、未コミットの更新結果を読んだ事象ではありません。

選択肢イ

これは不正解だよ。別のトランザクションが列の値を更新してコミットした後、同じ列を再参照すると値が変わったという内容です。更新はコミット済みなので、未確定データの読取りであるダーティリードには該当しません。

選択肢ウ

これは不正解だよ。二つのトランザクションが相互に必要なロックを保持して処理を進められなくなる現象は、デッドロックです。これはロック取得の待ち合わせに関する問題であり、未コミットの更新データを参照するダーティリードとは異なります。

選択肢エ(正解)

これは正解だよ。トランザクションAがまだコミットしていない更新後データを、トランザクションBが参照しています。その後にAの更新がロールバックされているため、Bは最終的に確定しなかったデータを読んでおり、ダーティリードに該当します。

学習のポイント

コミット前の更新結果を別トランザクションが読む現象を、確定後の参照と区別します。

出典:独立行政法人 情報処理推進機構(IPA)平成27年度春期 データベーススペシャリスト試験 午前Ⅱ 問16(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針