第12回講義資料

11/16/11
6. トランザクション管理(2)
データベース
第12回
6.3 障害回復 (1) 障害とその回復 (a) トランザクションと障害 障害回復 (recovery) の目的 データベース操作の実行中や実行後に, 何らかの障害やエラーが起きたとき,データ ベースの一貫性を保つこと データベースには失われたり,不整合になったりして はいけないデータなどが格納される ↓ 障害回復処理により,正しい状態に回復する 障害回復では → 原子性と耐久性を重視した管理 ① 残高チェックなどの処理中に障害が発生し,中断 した場合 → データベースの内容に変更なし ↓ もう一度最初からやり直せばよい ② 1番目の UPDATE が終了して,2番目の UPDATE の前まで処理したところで障害が発生し,中断し た場合 → 依頼人の口座残高から振替金額が引かれ た状態 ↓ もう一度最初からやり直すと,依頼人の口座 から振替金額が2回引かれてしまう
■ 図
6.1 の例 begin 残高チェックなどの処理 UPDATE 口座 SET 残高 = 残高 – 振替金額 WHERE 口座番号 = 依頼人 UPDATE 口座 SET 残高 = 残高 + 振替金額 WHERE 口座番号 = 受取人 end 図 6.1 振替送金処理 一般に,処理が中断した場合,どのような状態にな るのかを後から判断することは困難 トランザクションの原子性 → トランザクションを一体として扱う ↓ トランザクションの行った効果をすべて有効とするか, または,すべて無効とするかを保証することを意味 する
1
11/16/11
先の例で,送金が完了した後に障害が発生した場合 データの入った記憶装置(ハードディスクなど)に 障害がなければ,そのままで問題ない ↕ もしも記憶装置の内容が失われると → 耐久性が保障されない ↓ 何らかの方法で,データ内容を回復する必要あり
(b) 障害の種類 ① トランザクション障害 単一のトランザクションに限定された障害 プログラムのバグや,端末の障害などにより,トラ ンザクションが異常終了する場合 ② システム障害 ハードウェア,ソフトウェアの障害により,システム 全体がダウンする場合 処理中のプログラムが主記憶に展開していた情 報は失われるが,既に書き込まれたディスク内容 は保持
③ メディア障害 データを格納したディスクの内容が失われる障害 ハードウェア障害と,誤操作などにより発生 •  データベースの障害回復では,ディスクに書き込ま
れたデータの状態が重要 •  データベースへのアクセスを媒介するバッファを調
査し,未書き込みのバッファ内容をディスクに書き込
む操作(フラッシュ)などを行うことがある
(c) UNDO , REDO と障害回復 障害回復の基本的な処理 → トランザクションの UNDO と REDO UNDO トランザクションがデータベースに対して行ったす べての処理の取り消しを行う (トランザクション開始 前の状態に戻す) REDO コミットしたトランザクションの再実行を行う
UNDO と REDO を用いた障害回復の原則 ・ 実行中でコミットしていないトランザクションは, UNDO する ・ コミットしたトランザクションの結果が失われた場 合は,REDO する この原則を障害別に適用すると,以下のようになる (i) トランザクション障害の回復 ・ 該当する単一の実行中トランザクションを UNDO する (トランザクション UNDO) ・ トランザクションの再実行は,ユーザが判断 ・ 他のトランザクションは,そのまま実行 (ii) システム障害の回復 ・ 主記憶の内容が失われるので,すべてのトラン ザクションに影響 ・ ハードウェアの修理,OS によるシステム回復処 理の後,データベースの回復処理を次のように 行う
2
11/16/11
① 実行中のトランザクションは UNDO する (全局的 UNDO) ② コミットしたトランザクションの更新したデータ が失われた場合は,REDO する (局所的 REDO) (iii) メディア障害の回復 ・ データを格納したディスクの内容が失われるので, 多くのトランザクションに影響 ・ ハードウェアを修理し,システムを回復した後,以 下の処理を行う ① バックアップデータ(アーカイブ)をもとに,デー タベースを以前の状態に戻す ② データのバックアップ以後に実行したトランザ クションのうち,コミットしたものを REDO する (全局的 REDO) → 実行中だったトランザクションの情報 は,UNDO しなくても,そのまま失われ るので,何もしなくてよい ・ メディア障害への対策 アーカイブを作成しておくこと
(2) 障害回復の方法 (a) ロギングによる障害回復 ・ データベースの障害回復で,最もよく用いられ る方法 ・ ログ(ジャーナル) → データベース処理の記録 (データの変更をどのように行ったのか) ↓ データベースへの書込みの記録が最も重要
(i) ログの基本 データベースへの書込みが発生する度に,データ の更新前後の内容が,ログに書き込まれる (ii) ログによる REDO と UNDO REDO : ログに記録されたデータの更新後の内容を 書き込む UNDO : ログに記録されたデータの更新前の内容を 書き込む ログは通常,データベース本体の情報とは別の媒 体に書き込む
(iii) ログをとるタイミング ・ ログをとる前にデータ更新を行うと,UNDO できな くなる ・ コミットしたトランザクションのログがとれていない と,REDO できなくなる ↓ ログをとるタイミング → WAL プロトコルを使用 (write Ahead Log) (iv) WAL プロトコル ・ データ更新前にログに書く ・ コミットする前に,該当トランザクションのすべて のデータ更新をログに書く
(v) UNDO / REDO アルゴリズムでのトランザクション 中の処理 ① トランザクションの開始をログに記録する ② トランザクション中の読込みは,ログをとらずに 行う ③ トランザクション中の書込みは,まずログを書き 込み,次にデータを書き込む ↓ このとき,ログとデータはバッファ内に残ってい ても良いが,ディスクに書き込むときは,WAL に 従い,ログを先にディスクに書き込む
3
11/16/11
④ トランザクションのコミット時は,ログを書き込ん だ後,ログのバッファをフラッシュし,ディスクに 確実に書き込む ⑤ トランザクションのロールバック時は,ログに書 き込んだ後で,データを UNDO する システム障害後のログを用いた障害回復処理 ログを逆順に調べ,コミットしていないトランザクショ ン(終了していないか,ロールバックがログにある) を UNDO し,その後,コミットしたトランザクションを 順に REDO するのが基本 UNDO / REDO アルゴリズム以外にも,いくつかのロ ギングによる障害回復アルゴリズムが考案されて いる (b) チェックポイント バッファを定期的にフラッシュし,それ以後のログ だけを用いて障害回復を行う方法 → この処理を行う時点を,チェックポイントと 呼ぶ
チェックポイントを用いた代表的な障害回復の方法 (i) 新たなトランザクションの開始を禁止し,実行中の トランザクションのデータベースへのアクセスを一 時停止させる (ii) バッファの内容をフラッシュし,データベースに書 き出す (iii) 実行中のトランザクションをログに記録する この方法により,
•  チェックポイント時点で実行中のトランザクションは,
チェックポイント以前のログが必要 •  それ以外は,チェックポイント以降のログをチェック
することで,どのように回復すればよいか判定可能 •  チェックポイント時に実行中のトランザクションは,障
害時点までにコミットしていれば REDO され,それ以
外は UNDO される
チェックポイント
障害
時間
T1
回復処理の対象外
T2
REDO
T3
UNDO
T4
REDO
T5
UNDO
図 6.14 チェックポイント
7. データベース管理システム
7.1 データベース管理システムの概要 (1) データベース管理システムの機能 データベース管理システム (Database Management System , DBMS) は,ユーザやアプリ
ケーションに対し,データベース処理機能を提供 DBMS の基本機能は以下の3つに大別される
4
11/16/11
① データ定義機能 ・ データベースのスキーマを記述し,定義する機能 ・ スキーマ情報は,メタデータとしてデータベースに 格納 ・ データ定義を行う言語 → データ定義言語 ② データ操作機能 ・ 問合せによるデータの検索や,データの更新を行 う機能 ・ データ操作を行う言語 → データ操作言語 (SQL は,データ定義言語とデータ操作言語の両方 の機能を持つ)
③ データ制御機能 ・ データ定義やデータ操作時に,データベースの内 容を正常に維持管理するための機能 ・ セキュリティ保持のためのアクセス権制御,デー タの整合性維持のための一貫性制約,同時実行 制御,障害回復などの機能がある データ操作機能 上記の3つの機能のうち,一般のユーザが最も多 く使用する データ定義機能 データベース管理者 (Database Administrator , DBA) が使用することが多い データ制御機能 データ定義言語などで指定される データ操作時のデータ制御は,一般ユーザには 見えない(裏方で処理される)ことが多い
(2) データベース管理システムの構成 DBMS の構成は,システムごとに異なる 一般的には, ・ クエリ(問合せ)プロセッサ ・ 記憶マネージャ に大別できる 問合せ
データ更新
トランザクション マネージャ
クエリプロセッサ
記憶マネージャ
データ定義
データ/ メタデータ
図 7.1 DBMS の構成
データ定義言語 プロセッサ クエリプロセッサ: ・ 一般ユーザやアプリケーションプログラムからの データベース操作要求を処理 ・ 問合せをコンパイルし,問合せプランを作成して 処理を行うことが多い → 問合せ処理の効率化には,最適化が重要 記憶マネージャ ・ 格納されたデータを管理し,クエリプロセッサに高 速なアクセス機能を提供 ・ OS のファイルシステムと,そのバッファ管理機構 を利用して構成されることもあるが,効率向上の ため,独自のファイル管理を行うことが多い
5