データベースの基礎

SQLの標準規格が定める分離レベルのうち、READ COMMITTED で起こりうる現象の組み合わせとして正しいものはどれか。

  1. Aダーティリード、ノンリピータブルリード、ファントムリードのいずれも起こらない
  2. Bダーティリードは起こらないが、ノンリピータブルリードとファントムリードは起こりうる
  3. Cダーティリードとノンリピータブルリードは起こらないが、ファントムリードは起こりうる
答えと解説を見る

正解:B. ダーティリードは起こらないが、ノンリピータブルリードとファントムリードは起こりうる

SQLの標準規格は、分離レベルを、防ぐ現象の少ない順に READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE の4つと定めています。READ UNCOMMITTED では、3つの現象がすべて起こりえます。READ COMMITTED は、コミットされたデータだけを読むのでダーティリードを防ぎますが、読むたびにその時点のコミット済みの値を見るので、ノンリピータブルリードとファントムリードは起こりえます。REPEATABLE READ はさらにノンリピータブルリードを防ぎますが、ファントムリードは起こりえます。SERIALIZABLE は3つとも防ぎ、トランザクションをある順番で1つずつ実行した場合と同じ結果を保証します。分離レベルを上げるほど、ロックの待ち合わせや処理のやり直しが増えて、同時に処理できる量は減るので、用途に応じて選びます。実際のDBMSでは、既定の分離レベルや、各レベルで実際に防げる現象が、標準規格の最低限の定めより強い場合があります。

  • A. 3つとも起こらないのは SERIALIZABLE です。
  • B. 正しい。READ COMMITTED が防ぐのはダーティリードだけです。
  • C. これは REPEATABLE READ の性質です。
この分野を解く 分野ページへ

関連する計算ツール

データベースの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データベースの基礎のほかの問題

  1. トランザクションT1が、ある行に共有ロックをかけて読み出している。この行に対して、T2が共有ロックを、T3が専有ロック(排他ロック)を要求した。T1がロックを解除するまでの間について、正しいものはどれか。
  2. トランザクションの排他制御で使われる2相ロック方式の説明として、正しいものはどれか。
  3. トランザクションT1は行Aに専有ロックをかけたあと行Bのロックを要求し、T2は行Bに専有ロックをかけたあと行Aのロックを要求したため、どちらも先へ進めなくなった。DBMSがこの状態を検出したときに行う一般的な対処はどれか。
  4. 多くのDBMSは、データを更新するとき、更新の内容をログ(ジャーナル)に記録し、そのログをデータベース本体より先に不揮発性の記憶装置に書き込む(WAL: ログ先行書き込み)。この方式をとる主な理由はどれか。
  5. トランザクションT1〜T5があり、障害が発生する前にチェックポイントを1回取った。T1はチェックポイントの前に開始してコミットした。T2とT3はチェックポイントの前に開始し、T2はチェックポイントのあと障害の前にコミットし、T3は障害の時点でコミットしていなかった。T4とT5はチェックポイントのあとに開始し、T4は障害の前にコミットし、T5はコミットしていなかった。障害のあとの回復で、ログを使ってロールフォワードする必要があるトランザクションはどれか。