データベーススペシャリスト

データベーススペシャリスト ロールフォワードとチェックポイントとは

今回はデータベースのACID特性の「D」

Durability(持続性)に注目し

障害回復制御を詳しく見ていきます。

ログファイルの必要性や

「ロールフォワード,チェックポイントってなに?」って

方にとっては非常にわかりやすい内容になっています。

障害の種類

トランザクションの異常終了

トランザクションを再実行する
ことで対応する

システム障害

OSごと巻き込んで停止するケース。

この場合は仕方がないので

システムをリセットすることで対応する。

 

メモリ中にだけあって,

ディスクに書いていないデータ

は消失する。

 

このケースでデータを復旧するために

DBMSの世界ではログファイルというものが

存在し,すべての変更された記録は

ログファイルに書かれているため,

まだデータベースのディスクに書き込まれていなくても

復旧できる。

 

この場合変更後ログを使用し

ロールフォワードを行い

最新の状態にまで復旧する

媒体障害

ディスク装置の故障した場合は

前回のバックアップした時点に戻す必要がある。

 

バックアップを取っていない場合は

復旧不可能となる。

定期的なバックアップを通常は取る必要がある。

 

バックアップから復元しても

最新の状態にはならない。

前回のバックアップ取得時から

媒体障害が発生した時までの期間の

データを復旧するためには

変更後ログファイルを用いて

ロールフォワードする必要がある。

 

障害復旧の観点からもデータベースファイルと

ログファイルは別のドライブに格納するほうがよい。

 

そもそもログファイルは物理設計的に

データベースとは別ドライブに保存するのがセオリーで

パフォーマンス性は格段にあがる。

 

ログに関して

「ログ情報には誰がいつどの値をどう変更したか」という事が書かれている。

 

データベースに対してUpdate文やInsert文などで

データ更新を行っても実はすぐにはディスクに書かれていません。

 

例えば顧客を登録しても,顧客テーブルを格納している

ディスクはSQLServerでは8KBの小さなファイルに

ブロックごとに分かれて格納されており,

どこにどの値をいれて,どの値を更新するかを

物理ディスクレベルで行うと

非常に時間がかかる。

 

メモリレベルで2ミリ秒で終わることが

1秒とか2秒かかったりする。

 

データをどんどん登録していきたいのに

そんなことをしていては間に合わないので

物理ディスクには時々まとめて書き込んでいます。

 

しかし,時々まとめてかきこんでいたら

停電などでPCの電源が落ちたら

メモリ上のデータは消えてしまいます。

 

その状態でも復旧できるように

ログファイルというものに

「何をどうしたか」ってことを

ガンガン書き込んでいっています。

 

これはどこに書くかとか,何に書くかなんて考えずに

ログファイルの最後にどんどん追記するだけなので

高速に処理できます。

 

だからいったんログファイルにかいて

処理がたまったら物理ディスクに書いています。

 

トランザクションのコミット前に障害が起きたら?

ロールバックすることで問題を解決します

トランザクションのコミット後に,まだディスクに書かれる前に障害が起きたら?

ロールフォワードで復旧します。

ロールフォワードとは,データベースにたいして

ログファイルの情報で最新の状態にすることです。

 

例えばデータベースを更新時に

ログは書いたけど実際のテーブルのファイルには

記録していない場合,その時点で停電でPCの電源が落ちると

テーブルにはデータが更新されていないことになります。

 

しかし,停電前に処理したものは

当然データとして反映されていると思いますよね?

 

ATM銀行で振り込みをして,

「ありがとうございました。」っていわれて

その5分後に銀行が停電したからって

振り込み処理は成功したって誰でも思ってますよね?

 

だからこの場合,停電前のデータベースと

最後のログファイルの2つを突き合わせることで,

最新の状態というのは見えてくることになります。

 

この復旧方法をロールフォワードといいます。

 

だからログファイルに先行して

ガンガン書き込んでいるのは

非常に意味があるんです。

ログにさえ書いておけば安心ってことです。

ログの種類

論理ログ

SQL文レベルで変更履歴を管理をします。

何をしたかっていう記録を

SQL文で記録するので記録量は少なくなります。

 

しかしいざ復旧となると

SQL文を再実行するので

時間はかかります。

物理ログ

データのブロックをバイナリイメージで保管する

 

記録量は多くなりますが,

復旧時間は短くて済みます。

チェックポイント

チェックポイントとは先ほどほとんど話してしまいましたが,

データベースの更新順序はログを書いてから

時々たまっている分を物理的なテーブルファイルに

書き込みます。

 

そのたまってきたから書き込もう!って言うタイミングを

チェックポイントといいます。

 

これはSQLServerやOracleで使用は異なりますが

定期的にチェックポイントを発動したり,

ファイル要領の閾値などで発動したり,

PCのシャットダウン時などに発動したりと

時々発動しています。

 

DBMSを使う側は普段は気にしませんが

内部的にはこんな感じになっています。

 

トラブル発生時などは

こういった内部構造を知っていることで

解決問題などもあります。

 

障害タイミングによる対処の違い

チェックポイント発動まえか後で,

障害時の対応は異なってきます。

 

データ更新後,チェックポイントが発動してから

障害が発生した場合は,何も対処の必要はありません。

 

チェックポイントが発動すればすべてのデータは

物理テーブルファイルに書かれたことになり,

もう大丈夫です。

 

データ更新後,チェックポイント前に障害が発生したら,

これは次回起動時にログファイルを使って

ロールフォワードします。

 

データ更新後,コミット前に障害が発生したら,

これはロールバックします。

トランザクションとは

すべて成功かすべて失敗の原子性を

保つ必要があるので

コミット前に失敗したら当然ロールバックします。

SQLやデータベースについてもっと学びたい方は次の記事でおすすめの書籍を紹介しています↓

SQLServerやデータベースに関する書籍のおすすめランキング!SQLをこれからはじめようと思っている人や,普段SQLを使った仕事をしているけどもっと詳しくなりたい!という方向けに,どんな本を読めばい...

<<   1   2   3   4   5   6   7   8   9    10   11   12   >>

トップページへ戻る

BlazorでのWebアプリケーション開発手法2【C#】

■非公開コース「C#14新機能」プレゼント:
非公開コース「C#14新機能」(80分)をご覧になりたい方は
こちらからURLとパスワードを発行していますので、ご覧になってみてください。
非公開コース「C#14新機能」を観る

A01_はじめに
B01_メッセージを出すレイアウトの作成
B02_pタグを使ったメッセージ表示
B03_ポップアップメッセージを表示する方法
B04_問い合わせメッセージを表示する方法
B05_ユーザーの入力を受けるメッセージ
B06_インラインJavaScript非推奨
B07_Javascriptを分離してアクセスする方法
B08_MessageServiceを作成する
B09_自作Serviceの依存性注入をする方法
C01_EditFormを使った入力検証
C02_ValidationSummary
C03_ValidationMessage
C04_入力コンポーネント_InputText
C05_InputNumber
C06_未入力を許容する方法
C07_InputNumberで対応している型
C08_InputDate
C09_InputSelect
C10_入力コンポーネント_InputCheckbox
C11_InputRadioとInputRadioGroup
C12_InputTextArea
C13_InputFile
C14_ファイルの上限を設定する
C15_フォーカスをあてる方法_標準編_ElementReference
C16_フォーカスをあてる方法_Razorコンポーネント編
D01_StringLength
D02_RegularExpression_正規表現
D03_EmailAddress
D04_Compare
D05_ViewModelに分ける方法
D06_依存性注入を利用したViewModelの生成
D07_CustomValidation1
D08_CustomValidation2
D09_プロパティレベルのCustomValidation
D10_ValidationContext
D11_処理をViewModelに移す書き方
D12_ViewModelに移せないロジック
D14_ShouldRender
D15_ViewModelに書かないほうがいいもの
D16_エラー箇所にフォーカスを当てる方法
E01_Azureにデプロイするための事前作業
E02_Azureにアップするアプリの作成
E03_Azureへの公開準備
E04_Azureへの公開
E05_データベースの作成
E06_データベースのデータを取得する
E07_データベースの値を画面に表示する
E08_Azureのデータベースを作成する
E09_Azureのデータベースにポータルサイトからログインする
E10_AzureのDBにテーブルを作成する
E11_BlazorアプリからAzureDBに接続する
E12_SQLデータベース料金の注意
E13_AzureSQLデータベースの無料オファーを受ける
F01_依存性注入のライフサイクル
F02_クラウドでのAddSingletonの動き

■非公開コース「C#14新機能」プレゼント:
非公開コース「C#14新機能」(80分)をご覧になりたい方は
こちらからURLとパスワードを発行していますので、ご覧になってみてください。
非公開コース「C#14新機能」を観る