正解:ア
各選択肢の解説
ア変更はコミットで確定しているので、正しい数量に直す更新を改めて行う。
正解。コミットした時点で変更は確定し、ロールバックの対象から外れます。 誤りを直すには、正しい値に書き換える新たな更新を行います。
イロールバックを実行すれば、コミットした更新を取り消して元の数量に戻せる。
誤り。ロールバックで取り消せるのは、まだコミットしていない更新だけです。 どちらも「トランザクションの終わり方」なので何度でも切り替えられると 誤解しがちですが、確定させるか取り消すかは一度しか選べません。
ウ更新した行にはロックが掛かったままなので、他の利用者はその行を更新できない。
誤り。排他制御のロックは、トランザクションがコミットかロールバックで 終わった時点で解除されます。更新の途中なら他の利用者を待たせますが、 コミット後まで掛かり続けるわけではありません。
エこの後にシステム障害が起きると、コミットした更新も取り消されて元の数量に戻る。
誤り。障害が起きたときに取り消されるのは、コミットしていない途中の トランザクションです。コミット済みの更新は、障害があっても失われないよう 守られます。取り消されるかどうかの境目がコミットです。
理解を深めるために
コミットは「確定」のボタン
申込書を書いている途中なら、消しゴムで何度でも直せます。しかし提出して 受け付けられたあとは、消しゴムでは戻せず、訂正の申込みを出し直すしかありません。 データベースのコミットは、この「提出」にあたります。
コミットの前と後で何が変わるか
トランザクションは、コミットかロールバックのどちらかで終わります。
- コミット前 … 更新はまだ確定していない。ロールバックすれば開始前に戻せる。 更新中のデータにはロックが掛かり、他の利用者は待たされる
- コミット後 … 更新が確定する。ロールバックの対象ではなくなり、ロックも解除される。 障害が起きても、確定した更新は失われないよう守られる
つまり、コミットした後に誤りに気づいたら、「取り消す」のではなく 「正しい値に直す更新を新しく行う」ことになります。業務システムで訂正伝票を 起こすのと同じ考え方です。
混同しやすい説明との違い
| 操作・仕組み | いつ働き、何をするか |
|---|---|
| コミット | 成功したトランザクションの更新を確定させる。以後は取り消せない |
| ロールバック | コミット前の更新を取り消し、トランザクションの開始前に戻す |
| 排他制御(ロック) | トランザクションの実行中だけ、他の処理にデータを触らせない |
| 障害時の回復 | 未コミットの処理は取り消し、コミット済みの更新は残す |
試験では「コミットした後」か「コミットする前」かが分かれ目です。 取り消せる、待たされる、障害で消える、はいずれもコミット前の話と覚えておくと整理できます。