令和3年免除試験問題 問27
問27解説へ
データベースのトランザクションに関する記述のうち,適切なものはどれか。
- 他のトランザクションにデータを更新されないようにするために,テーブルに対するロックをアプリケーションプログラムが解放した。
- トランザクション障害が発生したので,異常終了したトランザクションをDBMSがロールフォワードした。
- トランザクションの更新結果を確定するために,トランザクションをアプリケーションプログラムがロールバックした。
- 複数のトランザクション間でデッドロックが発生したので,トランザクションをDBMSがロールバックした。
正解 エ問題へ
広告
解説
- 他のトランザクションにデータを更新されないようにするには、そのデータにロックを掛けます。ロックを解放すると他のトランザクションに更新されてしまいます。
- トランザクション障害が発生したときには、更新前ログを用いた「ロールバック」を行ってデータベースをトランザクション開始時点の状態に戻します。ロールフォワード(前進復帰)は、コミット済トランザクションの更新後ログを用いてデータベースを障害発生直前の状態に復旧する処理です。
- トランザクションの結果を確定するときの処理は「コミット」です。ロールバックは、トランザクションの途中、プログラムのバグなどでアプリケーションが強制終了した場合に、更新前ログを用いてデータベースをトランザクション開始直前の状態に戻す処理です。
- 正しい。デッドロックとは、共有資源を使用する複数のトランザクションが、互いに相手のトランザクションが必要とする資源を排他的に使用していて、さらに互いのトランザクションが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとトランザクションは永遠に待ち状態になってしまうため、処理の続行ができなくなってしまいます。デッドロックが発生したときには、DBMSが両方のトランザクションをアボート(中止)し、ロールバックします。
広告