データベースの障害管理と復旧方法〜基本情報技術者合格のための学習法〜

データベースの障害管理と復旧方法基本情報

しかし、どのようなデータベースシステムであれ、障害が発生することはゼロではありません。リスクを最小限にとどめる為には、障害は起こり得る想定した対策が必要です。

データベースの障害復旧には、バックアップファイルやジャーナルファイルを使います。

バックアップファイル

バックアップファイルは、データベースの内容を丸ごと別の場所にコピーすることです。
データベースは障害に備えて、1日に1回など頻度を決めて、バックアップをとります。
データベースが破損した場合、バックアップファイルと置換することで、リカバリーを行います。

ジャーナルファイル

バックアップファイルは、過去のある時点のコピーとなります。なので、バックアップを取ってから次のバックアップを取るまでの間に変更されたデータは含まれません。

チータくん
チータくん

そこで、バックアップ後の更新は、ジャーナルと呼ばれるログファイルに、更新前の状態(更新前ジャーナル)と更新後の状態(更新後ジャーナル)の情報を記録し、更新履歴を管理します。

データベースの障害管理

データベースの障害復旧(リカバリー)方法

コミットとロールバック

「INSERT文」「UPDATE文」「DELETE文」のいずれかのデータ操作文更は実行した時点で反映されます。  一方トランザクションを使うと複数の更新をまとめて反映することができます。 つまり、トランザクションによる更新内容が有効するか(コミット)、トランザクションによる更新内容が無効(ロールバック)にするかのどちらかになります。

トランザクションの詳しい解説は、こちらの記事をご覧ください。
トランザクション 〜基本情報技術者合格のための学習法〜

コミット

コミットはトランザクション内の処理が全て問題ない場合に実行する処理で、実行すると処理が確定し、トランザクションの結果がDBに反映されます。

チータくん
チータくん

コミット後のデータをロールバックすることはできません

ロールバック

ロールバックはトランザクション内の処理で問題が発生した場合に実行する処理です。
実行すると更新前ジャーナルからデータを取得し、トランザクション開始時までデータが戻ります。

ロールバックはトランザクション内の処理単位ではなくトランザクション単位で行われます。

分散データベース

分散データベースシステムと物理的に分散した複数のDBMSが通信手段を介して結合しユーザーにはあたかも1つのDBMSように見せるシステムのことです。

分散データベースの利点

危険分散
  • 災害やデータベースシステムの障害が発生しても、その影響を問題が発生したサイトに局所化することが可能となりますので、他のサイトのデータベースの利用を継続して行うことが可能となります。
  • データを複数のサイトに重複して格納しておくことによって、災害やデータベースシステムの障害が発生したサイトを除いてアクセスすることによりサービスを継続できます。
負荷分散
  • データベースを複数のコンピューターで管理することになりますので、負荷を分散させることが出来ます。
  • 負荷に偏りが発生した場合には、サイト間でデータの移動などによって負荷を均等化する余地があります。
  • システムの拡張は新たなデータベースシステムを分散データベースを構成するネットワークに追加すればいいので比較的容易です。

2相コミット

分散データベースでは、トランザクション処理が各サイトに渡って行われるため、全体の同期をとって、コミットやロールバックを行うようにしないと、一部のサイトだけが更新されたりして、、データの整合性が取れなくなります。

そのため2相コミットメントでは以下のような流れで、整合性をとります。

2相コミットメント(2PC)では、主サイトから複数の従サイトに直接コミット命令を発行するのではなく、2つのフェーズに分け、主サイトから対象となる複数の従サイトに対して、コミットが出来るかの問い合わせを行います。

更新準備が整っているサーバーは準備完了の応答を返信しすべての従サイトが準備を終えたことを確認した上で、主サイトはコミット命令を通知し、データベースが一斉に書き換えられます。

書き換え中にいずれかのデータベースで異常が発生した場合、異常が生じたサーバは失敗を伝えて、主サイトとも全ての従サイトに処理撤回を通知してロールバック処理を行うようにします。

このように一連の手順がコミット準備とコミット実行の2段階に分かれていることから、2相コミットメントと呼びます。

ロールフォワード

トランザクションの処理中ではなく、ディスク障害などで突然データベースが故障してしまった場合は、定期的に保存してあるバックアップファイルからデータを復元する必要が出てきます。

しかし、それだけでは、バッきうアップ後に与えられた変更は、失われたままです。そこで、データベースに行った更新情報を、バックアップ以降の更新後ジャーナルから取得し、データベースを障害発生直前の状態に復旧させます。

バックアップを適用して障害が起きる前の状態に一旦戻し、それ以降の一連の処理をロールフォワードと呼びます。

「ロールバック」と「ロールフォワード」の違い

「ロールバック」も「ロールフォワード」もデータベースに障害が発生した時の対処方法を意味しているという点ではよく似ていますが、「データベースやトランザクションの異常に対する具体的な処理のやり方」に違いがあり、以下の通りです。

ロールバック
  • 実行した処理を取り消して、データを後ろに戻します。
  • データベースの利用中にSQLの実行失敗やデッドロックなどでたびたび発生します。
チータくん
チータくん

トランザクション処理の途中でエラーが出た時に、エラーが出た処理を取り消すという処理方法です

ロールフォワード
  • まだ実行されていない処理を実行してデータを前に進める
  • 障害復旧時に使われる処理なので、滅多に発生しない(発生しない方が良い)
チータくん
チータくん

ただ取り消すのではなく、データベースが物理的に壊れた時に、特定のバックアップを利用してそれ以降の処理を再現することで障害が起きていないデータベースを復活させることです。

参考書籍

キタミ式イラストIT塾 基本情報技術者 令和03年
令和03年 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室 情報処理技術者試験
令和03年 基本情報技術者 合格教本 情報処理技術者試験

コメント

タイトルとURLをコピーしました