データベーススペシャリスト平成31年春期 午前Ⅱ 問9

問9

トランザクションの隔離性水準のうち,次の(1),(2)に該当するSQLの指定はどれか。
  • 対象の表のダーティリードは回避できる。
  • 一つのトランザクション中で,対象の表のある行を2回以上参照する場合,1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。
  • READ COMMITTED
  • READ UNCOMMITTED
  • REPEATABLE READ
  • SERIALIZABLE
  • [出題歴]
  • データベース R3秋期 問7
  • データベース H25春期 問9

分類

テクノロジ系 » データベース » トランザクション処理

正解

解説

隔離性水準とは、トランザクションに指定できる直列化制約の度合いで、隔離性の低い順に、①READ UNCOMMITTED、②READ COMMITTED、③REPEATABLE READ、④SERIALIZABLEの4種類があります。これらはSQLの"SET TRANSACTION"文に記述され、トランザクションを同時実行したことで発生する異常のうち、どのレベルまでを許容するかを指定します。

厳密なロックプロトコルに従えば、トランザクションの直列化可能性は保証されますが、それと引き換えに処理効率は悪くなります。このため、一定の異常を許容して処理効率を高めるオプションとして隔離性水準が用意されています。隔離性水準の中で最も高い安全性を提供するのは「SERIALIZABLE」ですが、多くのDBMSでは標準設定として「READ COMMITTED」が採用されています。

トランザクションの同時実行が原因で生じる3つの異常と、隔離性水準ごとの許容レベルをまとめると次のようになります。
ダーティリード
他のトランザクションが更新したコミット前の値(ダーティデータ)を読み、その後更新処理を行ったトランザクションがロールバックされると、存在しない値を読み込んだことになってしまう異常
ノンリピータブルリード/ファジーリード
同じトランザクションで複数回の読込みを行ったとき、読込む度に値が変わってしまう異常。2回の読込みの間に、別のトランザクションがそのデータを更新したことが原因で発生する
ファントムリード
同じトランザクションで複数回の読込みを行ったとき、前回は存在しなかった行が現れる異常。2回の読込みの間に、別のトランザクションがテーブルに行を挿入したことが原因で発生する
09.png/image-size:516×184
表より(1)ダーティリードを回避でき、(2)ノンリピータブルリードを許容する指定は「READ COMMITTED」とわかります。したがって「ア」が正解です。
© 2016- データベーススペシャリストドットコム All Rights Reserved.

Pagetop