【コミット】
トランザクションの正常終了時に発行する命令。
この命令が発行されることでトランザクションが終了し、データベースの内容が更新される。
【ACID特性】
トランザクション処理において、アプリケーションに要求される特性としてACID特性がある。
・Atomicity(原子性)
処理は全体として完了するか全くなされないかのいずれかである
・Consistency(一貫性)
トランザクションの処理によって矛盾を生じない
・Isolation(分離性又は隔離性)
他に影響を与えない
・Durability(持続性又は永続性)
処理結果は永続的である
【排他制御】
排他制御そのものはデータベース特有ではなく、般のファイル処理でも実行される。
なぜ排他制御が必要になるかを在庫管理の処理を例にとって説明する。
データベースで在庫数を管理しているわけだが、処理としては「営業所からの出庫指示」と
「倉庫での入庫管理」の2つを考える。
例)
営業所担当者の処理
(1)在庫数の確認 営業所→DB データベースへの検索
(2)在庫数の通知 DB→営業所 300個
(3)在庫引き当て 営業所→DB 20個出荷するためDB上の在庫数を
280個に書き換え
この処理が単独になされている分には問題ない。
ところが、倉庫管理者の次のような処理が同じタイミングで起こると問題が生じる。
倉庫管理者の処理
(1)在庫数の確認 倉庫→DB データベースへの検索
(2)在庫数の通知 DB→倉庫 300個
(3)在庫の追加 倉庫→DB 50個入荷するためDB上の在庫数を
350個に書き換え
時間の流れに沿って見てみる。
営業所 DB 倉庫
+−−−−+ |
|300個| |時間の流れ
検索→| | ↓
300個←|300個|
| |←検索
|300個|→300個
在庫引き当て | |
280個→|280個|
(=300−20)| | 入庫処理
|350個|←350個
| | (=300+50)
|350個|
+−−−−+
実際には300−20+50=330個の在庫のはずが、350個になり誤りである。
これを防ぐために、先に処理を始めた営業所側が「一連の処理」を「排他的に処理」する
必要がある。
この「一連の処理」を「トランザクション」と呼び、「排他的な処理」を「排他制御」と呼ぶ。
注1.ここでいうトランザクションは「マスタファイル・トランザクションファイル」の
組合せで称されるトランザクションとは異なる。
注2.全てのトランザクションが排他制御を行うわけではない。
検索のみのトランザクションならば排他制御の必要性がない。
上記の作業を排他制御を行いながら処理した場合の流れを表す。
営業所 DB 倉庫
+−−−−+ |
|300個| |時間の流れ
検索→| | ↓
300個←|300個|
| |←検索
在庫引き当て | | ・
280個→|280個| ・
(=300−20)| | ・営業所の
| | ・ 処理が終わるまで待つ
| | ・
|280個|→280個
| | 入庫処理
|330個|←330個
| | (=280+50)
|330個|
+−−−−+
《障害復旧》
【ロールフォワード】
ディスク装置の障害などで破壊されたファイルを、障害発生の直前の状態に復元させること。
セーブしたファイル(バックアップファイル)を正常なファイル装置に戻し、セーブ時以降の
更新後情報(ジャーナルログ)でファイルをすべて更新し、復元を行う。
これらの役割を以下に表す。
ジャーナルログファイル
┌──────────────┐
─────────────────────────→ 時間
▲ ▲
バックアップ 媒体障害
ファイル採取 発生時
【ロールバック】
システム障害の発生で中断された処理を、その処理のすべてが行われなかった状態に戻すこと。