FE EXAM

永続性(Durability)

確定したトランザクションの結果が障害が起きても失われない性質。

DIAGRAM
コミットログ(不揮発)復旧後のDB
① コミット(確定)残高 = 200 に更新「確定しました」と応答② ログに記録更新内容をディスクへ電源が切れても消えない⚡ 停電・障害発生メモリ上のデータは消えるログから復元③ 復旧後のDB残高 = 200 が復元 ✓コミット済みの結果は失われないポイント: 確定(コミット)した結果は、ログに残してあるので障害があっても必ず復元できる
解説

📌
永続性とは

コミット後は障害があっても残るコミット確定⚡障害残る ✓復旧後

永続性(Durability)とは、確定(コミット)したトランザクションの結果が、その後に障害が起きても失われない性質です。コミット=「この処理を確定します」とデータベースに伝える操作のことです。

ここで大切なのは、「確定しました」と応答を返したら、もう絶対に取り消されない・消えないという約束です。停電やプログラムの異常終了が起きても、確定済みの結果は守られます。

身近な例で考えると、ATMで「振込が完了しました」と画面に出た瞬間のようなものです。その直後にATMの電源が落ちても、振込はなかったことにはなりません。上の図解で、コミット後に停電してもデータが復元される流れを確認できます。

📌
障害復旧との関係

永続性は、障害復旧(リカバリ)の仕組みによって実現されます。データベースは、変更をすぐにはディスク本体へ書かず、まず高速なメモリ上で処理することがあります。メモリは電源が切れると消える「揮発性」の記憶なので、それだけでは永続性を守れません。

そこで障害復旧では、コミット済みの更新を確実に取り戻すために次のような操作を行います。
ロールフォワード(前進復旧):コミット済みなのにディスクへ反映されていなかった更新を、ログを使って再適用する
ロールバック(後退復旧):コミット前に中断した未確定の更新を、ログを使って取り消す

この2つを組み合わせることで、復旧後のデータベースは「コミット済みの更新だけが反映され、未確定の更新は残らない」正しい状態になります。永続性は、こうした復旧の仕組みに支えられているのです。

📌
ログファイルの役割

更新内容をログに記録 → 後で再現できるログファイル残高: 300→200COMMITDB復元残高 200

永続性を支える主役がログファイル(更新履歴を記録するファイル)です。DBMSは、トランザクションが行った更新の内容を、メモリではなく電源が切れても消えないディスク上のログファイルに書き出してから「確定しました」と応答します。

こうしておけば、たとえメモリ上の最新データが障害で消えても、ログをたどって同じ更新をやり直す(再適用する)ことで、コミット済みの結果を必ず復元できます。

身近な例で考えると、家計簿(記録)のようなものです。財布の中身(メモリ)を落としても、家計簿に「いつ・いくら・どう変えたか」を書いておけば、いつでも正しい残高を計算し直せます。ログファイルは、データベースにとっての家計簿なのです。

練習問題

🎯
基本情報技術者 練習問題

Q1.トランザクションの永続性(Durability)の説明として最も適切なものはどれか。
A.確定したトランザクションの結果が障害が起きても失われない
B.処理がすべて成功するか、すべて失敗するかのどちらかになる
C.前後でデータベースの整合性が保たれる
D.複数の処理を同時に実行しても互いに干渉しない
Q2.永続性を保証するために一般的に用いられる仕組みはどれか。
A.コミット時に更新内容をログファイルに書き出して残す
B.すべてのデータをメモリ上だけに保持する
C.主キーに索引を付ける
D.ビューを定義してデータを隠す
Q3.コミット後に停電が起き、メモリ上のデータが消えた。永続性が保証されていれば復旧後はどうなるか。
A.コミット済みの更新はログを使って復元される
B.コミット済みの更新も含めてすべて失われる
C.データベース全体が初期状態に戻る
D.復旧そのものができなくなる

関連コンテンツ