トランザクションの状態遷移をどう判断する?
基本情報技術者試験 令和元年度秋期 午前 問28 / データベース › トランザクション処理
過去問にチャレンジ
一つのトランザクションはトランザクションを開始した後,五つの状態(アクティブ,アボート処理中,アボート済,コミット処理中,コミット済)を取り得るものとする。このとき,取ることのない状態遷移はどれか。

- ア
遷移前の状態:アボート処理中,遷移後の状態:アボート済
- イ
遷移前の状態:アボート処理中,遷移後の状態:コミット処理中
- ウ
遷移前の状態:コミット処理中,遷移後の状態:アボート処理中
- エ
遷移前の状態:コミット処理中,遷移後の状態:コミット済
会話形式の解説
講師この問題では、同じトランザクションが取り消しと確定のどちらへ進んでいるかを見ます。まず「処理中」と「処理済」を分けて考えましょう。
受験者処理中なら、まだその処理は終わっていないということですね。完了した場合の遷移から確認したいです。
講師アボートは更新を取り消す処理です。アボート処理中からアボート済へ移るのは、取り消しが終わった場合です。
受験者では、アボート処理中からコミット処理中へ移るのも、途中で方針が変わればあり得ますか。
講師そこが問われています。コミットは結果を確定する処理です。同じトランザクションの更新を取り消しながら、確定処理へ進むことはありません。この遷移が正解のイです。
受験者反対に、コミット処理中からアボート処理中へ移るのも、途中で方針を変えるように見えます。
講師コミット処理中には、障害が起きてアボート処理中へ移る場合があります。確定処理を始めただけでは、取り消しへの遷移はなくなりません。
受験者コミット処理中からコミット済へ移るのは、確定処理が終わった場合ですね。
講師そのとおりです。コミット処理中からは、処理が完了した場合と障害が起きた場合を分けて判断します。
受験者取り消しの完了、確定の完了、確定処理中の障害は起こり得ます。取り消し中から確定処理中へ移るものだけが起こり得ないと分かりました。
講師状態遷移を読むときは、前後が同じトランザクションの状態だと確かめてください。「処理中」を「処理済」と読み違えないことも大切です。
まとめ
アボートは更新の取り消し、コミットは結果の確定です。アボート処理中からコミット処理中へは移らないため、正解はイです。各処理が終わればそれぞれ処理済へ移り、コミット処理中に障害が起きた場合はアボート処理中へ移り得ます。
解答・解説
正解はイです
この問題のテーマ
トランザクションの中止と確定の流れを踏まえ、起こり得ない状態遷移を見分ける問題です。
解き方の考え方
遷移前の状態が「処理中」のとき、その処理が完了した場合と、障害が起きた場合を分けて考えます。アボートは更新を取り消す処理、コミットは結果を確定する処理です。同じトランザクションを取り消しながら確定処理へ進めるかに注目します。
選択肢ごとの解説
- ×ア 遷移前の状態:アボート処理中,遷移後の状態:アボート済アボート処理中からアボート済への遷移は、更新を取り消す処理が終わったことを表します。したがって、取ることのない遷移には当たりません。
- ○イ 遷移前の状態:アボート処理中,遷移後の状態:コミット処理中アボート処理中のトランザクションは、更新の取り消しを進めています。その同じトランザクションが、結果を確定するコミット処理中へ移ることはないため、これが正解です。
- ×ウ 遷移前の状態:コミット処理中,遷移後の状態:アボート処理中コミット処理中に障害が起きた場合は、アボート処理中へ移り得ます。確定処理を始めたというだけで、取り消しへの遷移がなくなるわけではありません。
- ×エ 遷移前の状態:コミット処理中,遷移後の状態:コミット済コミット処理中からコミット済への遷移は、結果を確定する処理が終わったことを表します。通常の完了に対応する遷移です。
POINT
- 「処理中」と「処理済」は異なる状態として読むことが大切です。
- 状態遷移では、遷移前と遷移後が同じトランザクションの状態であることを確認します。
- コミット処理中からの遷移は、処理の完了と障害の発生を分けて考えます。
