修了試験 2020-06-14実施分 基本情報技術者試験 問29
“商品”表に対して,更新SQL文を実行するトランザクションが,デッドロックの発生によって異常終了した。 異常終了後の“商品”表はどれか。 ここで,“商品”表に対する他のトランザクションは,参照は行うが更新はしないものとする。 商品 商品コード|商品名|販売単価/A010|AAA|2,500/B020|BBB|1,000/C030|CCC|4,500 〔更新SQL文〕 DELETE FROM 商品 WHERE 商品コード = 'B020'
正答2
解説
正解は2です。 トランザクションが異常終了したときのDBMSの回復処理を問う問題です。 トランザクションは「すべて実行されるか、まったく実行されないか」のどちらかでなければなりません(原子性)。 デッドロックで異常終了したトランザクションは、ロールバックされて実行前の状態に戻ります。 【選択肢別解説】 1:× B020の行の商品名だけがNULLになった表です。 DELETE文は行を削除する文で、列の値をNULLにすることはありません。 また異常終了なので、表は更新前の状態に戻ります。 2:○ 異常終了したトランザクションはロールバックされ、DELETEは取り消されます。 A010、B020、C030の3行がそのまま残った、更新前と同じ表になります。 3:× B020の行が削除された表は、DELETEが正常に完了してコミットされた場合の結果です。 異常終了したので、この状態にはなりません。 4:× B020の行だけが残った表は、B020以外を削除した結果に当たります。 DELETE文の条件とも、異常終了後の状態とも一致しません。 【ポイント】 トランザクションの性質はACID(Atomicity:原子性、Consistency:一貫性、Isolation:独立性、Durability:耐久性)です。 異常終了時はロールバック(更新前ログで戻す)、障害で失われたコミット済みの更新はロールフォワード(更新後ログで再実行)で回復します。まとめて解く
修了試験 2020-06-14実施分を通しで解く(80問)→