HOME»データベーススペシャリスト掲示板»令和2年秋期 午後1 問2 設問2 (2)
投稿する

令和2年秋期 午後1 問2 設問2 (2) [0898]

 hogeさん(No.1) 
【問題文】
(2)空席管理システムで実行するトランザクションのISOLATIONレベルはREAD COMMITTED(①)とREPEATABLE READ(②)のどちらを設定すべきか、①か②で答えよ。また、その理由を30字以内で述べよ。
解答:(Isolation Level)REPEATABLE READ
       (理由)同時実行した他社が仮予約できないようにするため

【注目するトランザクション処理】
(a)トランザクションを開始する。
(b)座席数分、次の処理を繰り返す。
・空席フラグがオンか確認する。
・仮予約フラグがオフか確認する。
・仮予約フラグをオンにする。
(c)コミットする。

【問題文に登場する2つのIsolation Level】
Read Committed  共有ロック:参照終了時に解放
Repeatable Read  共有ロック:トランザクション終了時に解放

【ご質問させていただく内容】
上記2つの隔離性レベルの排他制御の内容は、データ参照時のみ違いがあります。
同時に処理が実行された場合、同じ座席に対して仮予約をさせないよう制御するという問題の意図は分かるのですが、なぜ共有ロックの内容の違いで同じ座席の仮予約を防ぐことができるのか分かりません。教えていただけないでしょうか。

私は共有ロックの場合、どのトランザクションからも参照できてしまうという考えが頭に強く残っているため、共有ロックが解放されるのが参照終了時であろうが、トランザクション終了時であろうが一緒ではないかと考えてしまっています。
2025.08.18 00:41
DCLさん(No.2) 
共有ロックをa〜c間、維持する事で自ユーザー以外が「仮予約フラグをオンにする」出来ないようにする為です。※共有ロックと更新ロックはバッティング。

おっしゃる通り、参照はどのトランザクションからも可能なので「仮予約フラグがオフか確認する」が他ユーザーと重複する事はあります。
この場合はデッドロックが発生する事になりますが、問題文に例外処理は省略するとあるので、最適なエラーハンドリングはされているのでしょう。

平成29年の午後1の問2の設問2が類似問題なので、こちらも確認して理解を深めていただければと思います。
2025.08.18 08:02
DCLさん(No.3) 
a〜cの間ではないですね。正しくは共有ロックを取得してからcまでですね。失礼しました。
2025.08.18 08:07
ぶどうさん(No.4) 
 模範回答に忖度すると、出題意図は①を選ばない理由です。それを裏返して解答(②を選ぶ理由として)させている。
 言葉遊びがまかり通る時代があったんです。例えば、運転免許試験は名残りが残っていますよね。
2025.08.18 21:03
 hogeさん(No.5) 
ご回答いただいた方々、ありがとございます。
類似問題を解いていき、知識を深めたいと思います。
2025.08.20 12:30
返信投稿用フォーム
お名前
顔アイコン

本文(コミュニティガイドライン⇱を順守して適切な投稿を心がけましょう)
🔐投稿削除用のパスワード(任意)
投稿プレビュー
※SQL文は全角文字で記載してください。
※宣伝や迷惑行為を防止するため、当サイト、姉妹サイト、IPAサイト以外のURLを含む文章の投稿はできません。
投稿記事削除用フォーム
投稿No. パスワード 
© 2016- データベーススペシャリストドットコム All Rights Reserved.

Pagetop