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

令和4年度秋期 データベーススペシャリスト 午前Ⅱ 問14

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

問題

トランザクションT1がある行Xを読んだ後,別のトランザクションT2が行Xの値を更新してコミットし,再びT1が行Xを読むと,以前読んだ値と異なる値が得られた。この現象を回避するSQLの隔離性水準のうち,最も水準の低いものはどれか。

選択肢

  1. ア
    READ COMMITTED
  2. イ
    READ UNCOMMITTED
  3. ウ
    REPEATABLE READ
  4. エ
    SERIALIZABLE
解き方のヒントを見る

トランザクション隔離性の読み解き

同じ行を同じトランザクションが二度読んだとき、途中の更新によって結果が変わる状況を手掛かりに、隔離性水準が何を防ぐための段階かという用語の関係を整理します。

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

焦点は、再読時に値が変わる現象と、隔離性水準が保証する読み取りの安定性との対応です。水準の大小を、どの異常を防ぐかという観点で整理し、定義の違いを確認してください。

視点

トランザクションの隔離性水準は、同時実行中の他トランザクションによる変更を、ある処理からどの程度見えにくくするかを段階的に表します。問題文の再読み取りに注目し、現象と保証範囲の対応を考えましょう。

確認ポイント

  • 問題文が示す読み取り結果の変化を、データベースの異常として言語化する。
  • 各隔離性水準が、同時実行時の読み取りにどの範囲の保証を与えるか確認する。
  • 「最も水準の低い」という条件が、必要最小限の保証を尋ねている点を確認する。
正解と解説を見る

正解

ウ

解説

T1が同じ行を読み直したとき、T2のコミット済み更新によって異なる値を得る現象は、非反復読取りです。これを防ぐには、同一トランザクション内の再読結果を保証する隔離性水準が必要になる。

理由

T1の最初の読取り後にT2がXを更新してコミットしたため、T1の再読時に値が変化している。これは非反復読取りに該当し、同一トランザクションで同じ行を読んだ結果を繰り返し一致させる水準が必要です。したがって、最も低い該当水準はREPEATABLE READです。

比較

READ UNCOMMITTEDは未コミットの変更も読み得るため、より低い水準です。READ COMMITTEDは未コミット読取りを防ぐが、別トランザクションがコミットした後の再読結果までは固定しない。SERIALIZABLEも現象を防ぐが、REPEATABLE READより高い水準です。

選択肢ア

これは不正解だよ。READ COMMITTEDは、未コミットの更新を読み取ることは防ぐが、最初の読取り後に別トランザクションが更新してコミットした場合、その後の再読で新しい値が見えることがある。したがって、設問の非反復読取りを回避できない。

選択肢イ

これは不正解だよ。READ UNCOMMITTEDは、他トランザクションの未コミット変更を読み取ることも許す最も低い隔離性水準である。そのため、コミット済み更新によって再読値が変わる設問の現象を防ぐ水準ではない。

選択肢ウ(正解)

これは正解だよ。REPEATABLE READは、同一トランザクション内で一度読み取った行を再度読み取ったとき、他トランザクションの更新によって値が変化する非反復読取りを防ぐ。SERIALIZABLEより低い水準で、この現象を回避できる。

選択肢エ

これは不正解だよ。SERIALIZABLEは同時実行を直列実行に近づける最も高い隔離性水準で、設問のような再読時の値の変化も防げる。しかし、問題は回避できる水準のうち最も低いものを問うため、必要以上に高い水準である。

学習のポイント

非反復読取りとSQLの隔離性水準の関係を理解する。

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

関連する過去問一覧

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