問46 トランザクションの正しい扱い

情報セキュリティ​マネジメント試験 令和元年度 秋期 午前、全50問のうちの問46。

出典:令和元年度 秋期 情報セキュリティマネジメント試験 午前 問46

データベースのトランザクションに関する記述のうち,適切なものはどれか。

  1. ア他のトランザクションにデータを更新されないようにするために,テーブルに対するロックをアプリケーションプログラムが解放した。
  2. イトランザクション障害が発生したので,異常終了したトランザクションを DBMS がロールフォワードした。
  3. ウトランザクションの更新結果を確定するために,トランザクションをアプリケーションプログラムがロールバックした。
  4. エ複数のトランザクション間でデッドロックが発生したので,トランザクションを DBMS がロールバックした。
答えと解説を開く

正解はエです。

デッドロックは、トランザクション 1 がデータ X をロックしたまま Y を待ち、トランザクション 2 が Y をロックしたまま X を待つ、というように、互いに相手を待ち合って先に進めなくなる状態です。放っておくと永久に終わりません。そこで DBMS はデッドロックを見つけると、どちらかのトランザクションを選んでロールバック (更新を取り消して始める前の状態に戻す) し、持っていたロックを外します。残ったトランザクションは処理を続けられます。正解はエです。

ほかの選択肢が違う理由

  • ア他のトランザクションに更新されないようにするには、ロックを掛けます。ロックを解放すると、他のトランザクションが更新できるようになり、目的と逆です。
  • イ異常終了したトランザクションは、途中までの更新を取り消すロールバックで元に戻します。ロールフォワードは、媒体の障害などのあとで、バックアップにログの更新後の内容を当て直して、確定済みの更新を復元する方法です。
  • ウ更新結果を確定するのはコミットです。ロールバックは更新を取り消す操作で、確定とは逆です。

仕組み

コミット (確定する)、ロールバック (取り消して前の状態に戻す)、ロールフォワード (バックアップからログで先へ進めて復元する) の 3 つを、向きで覚えます。ロールバックは後ろへ、ロールフォワードは前へ進めます。

デッドロックを起こしにくくするには、複数のデータをロックするときの順番を、どのトランザクションでもそろえておく方法があります。

この問に出る言葉