トランザクション

データ参照時に(つまりselect文実行時に)FOR UPDATE句を指定すると、対象行に専有ロックを掛け、トランザクション終了時に解放する。 

[トランザクション分離レベル]

[AP(Application) サーバ]

[トリガ]


障害回復機能

1.DBは更新内容を直接データファイルに書かない

2.まずログ(REDO/UNDO/WAL)に書き込む

3.ログがディスクにフラッシュされた時点で「コミット完了」とみなす

4.障害復旧時にはログを元にロールフォワード(REDO)/ロールバック(UNDO)する


分散データベース

[分散問合せ処理]


[2相コミット(2PC, Two-Phase Commit)]

2相コミットを行うためには,同時に更新しようとする分散データベースの全てが更新可能かどうかを判断するためのやり取りが必要である。

主サイトは,コミットが可能であることを各データベースサイトに確認した後,コミットを発行する。2というのはノードの数ではない。100ノードあっても2PC。


ロールバック

例: ユーザーが UPDATE をしたけど途中でエラー → そのトランザクションをなかったことに戻す。

例: バッチ処理の途中で例外発生 → その伝票分だけ全部取り消し。


ロールフォワード

例: サーバがクラッシュしてDBが落ちた。

再起動時にログを読んで「最後のコミット状態」までDBを追いつかせる。

これは ユーザーの意識と関係なくDBが自動でやる。


2相コミット(2PC)

例: 本社のOracle DBと、支店のSQL Server DBの両方に伝票を入れなければならない。

「両方成功ならコミット/片方失敗なら両方ロールバック」を保証する仕組み。

これもアプリが COMMIT; を出すと裏で勝手に動く。


DBMSのインフラ