データベース

【応用情報】ロールバックなどデータベースの障害対応と分散データベースについて解説

お茶ん太
お茶ん太

この記事では、コミットとロールバック・ロールフォワード・チェックポイントを使ったロールフォワード・ロールバック、分散データベースについて、初心者にも分かりやすく図解付きで丁寧に解説しています!

コミットとロールバック

  • トランザクション処理が正常に終了した時は、データベースに処理結果を反映させるコミットを行う
  • トランザクション処理が途中で異常終了した時は、処理直前の状態に戻すために、更新前情報を用いたロールバックを行う

ロールフォワード

  • トランザクション処理とか関係なく、データベースに障害が発生した時は、定期的に取得しているバックアップからデータを復元して、バックアップ取得後に行われたトランザクション処理の結果の回復については更新後情報を用いたロールフォワードを行う

チェックポイント

  • トランザクション処理の結果を主記憶装置にコミットしておき、その後、まとめてデータベースに結果を更新するイベントをチェックポイントと呼ぶ
  • チェックポイント前にコミットした内容は、チェックポイント時にデータベースへ内容が反映されているので回復処理が不要
  • チェックポイント後にコミットした内容は、データベースへの反映がまだなので、ロールフォワードによる回復処理が必要

分散データベースと2相コミット

  • 複数のデータベースでデータを管理するが、見かけ上ひとつのデータベースとして扱えるようにしたシステムを分散データベースと呼ぶ
  • 分散データベースでは全てのデータベースがコミット可能ならコミットを実行し、ひとつでもコミット不可ならロールバックを行う。これを2相コミットと呼ぶ。

トランザクション処理

トランザクション処理とは、データベースに対してまとめて行う必要がある操作を一括りにした処理のことです。トランザクション処理は全てを完全に行うか、全く行わないかのどちらかです。

トランザクション処理の例は銀行の振込処理です。
振込処理は以下の4つの処理から成り立ち、中断することは許されません。

  1. Aさん(送金する人)の口座残高を確認する
  2. Aさんの口座から残高を減らす
  3. Bさん(入金される人)の口座残高を確認する
  4. Bさんの口座残高から残高を増やす

トランザクション処理が途中で終了した場合を考えてみましょう。例えば、送金口座から残高を減らした後にシステム障害が起きて、入金口座の残高を増やす処理が行われなかったとします。Aさんの送金口座からお金は減ったのに、Bさんの入金口座の残高が増えないことになり、凄く困ったことになりますよね。

なので、処理を行う時は4つ全て行う必要があり、途中で失敗した時は一番最初の状態に戻す必要があります。このように、一連で行う必要がある操作の一括りをトランザクション処理と言います。

バックアップとログファイル

バックアップ

バックアップとは、データベースに記録されたデータをコピーして別の場所に保管することです。バックアップのおかげで、データベース障害でデータが破損した時も、データの復元が可能になります。

ログファイル

トランザクション処理でデータベースを更新するときは、更新前と更新後の情報を記録しておきます。更新前後の情報を残すことで障害が発生した時にデータベースの復旧が可能になるんですね。更新前後の情報を記録したファイルをログファイルと呼びます。

コミットとロールバック

トランザクション処理が成功したときは変更を確定する処理を行い、それをコミットと呼びます。一方、トランザクション処理が途中で失敗したときは、データベースの状態をトランザクション処理を実行する前に戻す操作を行い、それをロールバックと呼びます。ロールバックのときは更新前情報を使います。

ロールフォワード

ロールフォワードは、データベースに物理的な障害が発生した際に、直前のバックアップとログの更新後情報からデータを復旧させる方法です。

データベースに物理的な障害が発生した場合は新しいデータベースを用意してデータを復旧する必要があります。新しいデータベースには、直近のバックアップデータを適用し、その後のトランザクションの更新後ログを順番に適用していくことで、物理的な障害が発生する前の状態に戻します。

チェックポイント

DBMSには処理結果をすぐデータベースに更新せず、いったん主記憶装置に記録した後にまとめてデータベースに更新するものがあります。なぜなら主記憶装置に更新する方が速いからです。

いったん主記憶装置に記憶した情報は、一定間隔でデータベースに反映させます。この反映のことをチェックポイントと言います。

チェックポイントを使うシステムで、トランザクション処理中に障害が発生した場合の復旧方法を見てみましょう。

  • トランザクション処理①:
    データベースに反映しているので復旧の必要はありません
  • トランザクション処理②:
    主記憶装置にコミットはしたが、データベースに反映する前に障害が発生したので、チェックポイントからロールフォワードが必要です
  • トランザクション処理③:
    トランザクション中に障害が発生したので、ロールバックでトランザクション前の状態に戻す必要があります

分散データベースと2相コミット

物理的に複数に分けたデータベースを、あたかも1つのデータベースとして使えるようにしたデータベースを分散データベースと呼びます。調停者はデータベースのリーダ的な存在で、他のデータベースに指示を出します。

分散データベースで大事なのは「ユーザはひとつのデータベースに見えている」という点です。これを実現するために、分散データベースは6つの透過性という性質を持つように作られます。

データモデルに対する透過性 参加者同士のDBMSが異なっていても、ユーザは意識せずに使える
分割に対する透過性 データが複数の参加者に分割されていても、ユーザは1つのかたまりとして使える
移動に対する透過性 データが参加者間で移動しても、ユーザは意識せずに使える
複製に対する透過性 データが複数の参加者に複製されていても、ユーザは意識せずに使える
位置に対する透過性 データがどこにあっても、ユーザは意識せずに使える
障害に対する透過性 一部の参加者で不具合が発生しても問題なく使える

参加者間で同じデータを複製して管理しておけば、万が一、一部の参加者に不具合が発生しても問題なく使えますし、大量のデータを扱う場合、負荷を分散できるメリットが得られます。

2相コミット

分散データベースでは、全員がコミット可能なら全員でコミットし、ひとつでもコミット不可なら全員でロールバックします。このような方式を2相コミットと呼びます。

2相コミットは次のような手順で行います。

  1. 調停者が参加者にコミット可能か問い合わせる
  2. 参加者は調停者にコミット可能か返答する
  3. 全員がコミット可能なら全員でコミットし、ひとつでも不可なら全員でロールバック

応用情報技術者試験での出題例

令和6年度秋期問27

応用情報技術者
午前試験 令和6年度秋期問27

2相コミットで分散トランザクションの原子性を保証する場合,ネットワーク障害の発生によって参加者のトランザクションが,コミットすべきか又はロールバックするべきかを判断できなくなることがある。このような状況を発生させるネットワーク障害に関する説明として,適切なものはどれか。

ア 調停者のトランザクションが,コミット又はロールバック可否の問合せを参加者に送る直前に障害になった。

イ 調停者のトランザクションが,コミット又はロールバックの決定を参加者に送る直前に障害になった。

ウ 調停者のトランザクションに,コミット又はロールバック可否の応答を参加者が返す直前に障害になった。

エ 調停者のトランザクションに,コミット又はロールバックの完了を参加者が返す直前に障害になった。

正解と解説

正解は”イ”

トランザクション処理は完全に完了するか、全く行わないかのどちらかを取らないといけないという性質を原子性と呼びます。

参加者がコミットすべきかロールバックすべきか分からなくなるのは、調停者から指示が来ないからですよね。これはイのパターンのときに発生するので答えはイです。

令和6年度秋期問31

応用情報技術者
午前試験 令和6年度秋期問31

DBMSのチェックポイントに関する記述として,適切なものはどれか。

ア 制約のチェックを行う時点を指し,データ操作ごとに即時にチェックを行うか,トランザクションのコミット時までチェックを遅延させるかの指定ができる。

イ データベースバッファの内容を二次記憶に書き出した時点を指し,障害回復処理の際に,その時点までにコミットされたトランザクションの回復作業を不要にできる。

ウ 一つのトランザクションの途中に任意に設定できる時点を指し,プログラムによってその時点まで明示的にロールバックできる。

エ 分散トランザクションの調停者が,全参加者からコミット可否を受け取り,コミットかロールバックかの判定を行う時点を指し,その後に全参加者にコミット又はロールバックの実行要求を発行することによって,分散トランザクションの原子性,一貫性が保証できる。

正解と解説

正解は”イ”

トランザクション処理の結果をすぐにデータベースに記録せずに、主記憶装置にいったん記録しておいて、ある程度まとめてからデータベースに記録する時点をチェックポイントと呼びます。

チェックポイント以前にコミットされた内容は、既にデータベースサーバに反映済みなので、主記憶装置に障害が発生しても回復作業をする必要がありません。

令和6年度春期問27

応用情報技術者
午前試験 令和6年度春期問27

トランザクションTはチェックポイント後にコミットしたが,その後にシステム障害が発生した。トランザクションTの更新内容をその終了直後の状態にするために用いられる復旧技法はどれか。ここで,トランザクションはWALプロトコルに従い,チェックポイントの他に,トランザクションログを利用する。

ア 2相ロック
ウ ロールバック

イ シャドウページ
エ ロールフォワード

正解と解説

正解は”エ”

問題文の状況を図にすると、このようになります。

トランザクションTは正常に終了して、主記憶装置にコミットされていますが、DBサーバに更新されていないため、更新後情報を使って復旧する必要があります。これをロールフォワードと言うので、答えはエです。

令和5年度秋期問30

応用情報技術者
午前試験 令和5年度秋期問30

DBMSをシステム障害発生後に再立上げするとき,ロールフォワードすべきトランザクションとロールバックすべきトランザクションの組合せとして,適切なものはどれか。ここで,トランザクションの中で実行される処理内容は次のとおりとする。

正解と解説

正解は”ア”

T1はコミット後にチェックポイントがあるのでDBサーバに処理内容が反映されています。
よって、復旧は必要ありません。

T2とT5はチェックポイント後にコミットされているので、DBサーバへ処理内容が反映されていません。よって、ロールフォワードの対象です。

T3とT4はデータベースを更新しない処理のため、復旧する必要はありません。

T6はトランザクション中に障害が発生したので、ロールバックの対象です。

令和4年度秋期問29

応用情報技術者
午前試験 令和4年度秋期問29

チェックポイントを取得するDBMSにおいて,図のような時間経過でシステム障害が発生した。前進復帰(ロールフォワード)によって障害回復できるトランザクションだけを全て挙げたものはどれか。

正解と解説

正解は”ウ”

ロールフォワードで復旧するトランザクションは、
コミット済みで更新後情報があり、DBサーバに反映されていないもの(チェックポイント後にコミット)が対象です。よって、答えはT4とT5のウになります。

令和4年度春期問29

応用情報技術者
午前試験 令和4年度春期問29

undo/redo方式を用いた障害回復におけるログ情報の要否として,適切な組合せはどれか。

正解と解説

正解は”ア”

undoは「更新の取り消し」、redoは「undoで取り消した更新を再度行う」ことです。
Excelで言うと、左の矢印がundoで、右の矢印がredoです。

なので、undoは更新前情報が、redoは更新後情報が必要になります。

令和3年度秋期問27

応用情報技術者
午前試験 令和3年度秋期問27

データベースの障害回復処理に関する記述として,適切なものはどれか。

ア 異なるトランザクション処理プログラムが,同一データベースを同時更新することによって生じる論理的な矛盾を防ぐために,データのブロック化が必要となる。

イ システムが媒体障害以外のハードウェア障害によって停止した場合,チェックポイントの取得以前に終了したトランザクションについての回復作業は不要である。

ウ データベースの媒体障害に対して,バックアップファイルをリストアした後,ログファイルの更新前情報を使用してデータの回復処理を行う。

エ トランザクション処理プログラムがデータベースの更新中に異常終了した場合には,ログファイルの更新後情報を使用してデータの回復処理を行う。

正解と解説

正解は”イ”

ア 同時更新による矛盾を防ぐためにするのはトランザクション処理の排他制御なので誤りです。

イ 媒体とは情報を記録する装置のことです。なので、ここで言う媒体障害とはDBサーバの障害のことですね。DBサーバ以外で障害が発生しているので、チェックポイントでDBサーバに反映した情報は無事だと考えることが出来ます。よって、チェックポイント以前に終了したトランザクション処理は回復処理が不要なので正解です。

ウ 媒体障害、つまり、DBサーバに障害が発生した時、バックアップを復元した後、バックアップ後のトランザクション処理の更新情報を用いて回復処理を行います。よって誤りです。

エ トランザクション処理が異常終了した場合は、トランザクション処理の更新情報を用いて処理直前の状態に戻します。よって誤りです。

令和3年度秋期問30

応用情報技術者
午前試験 令和3年度秋期問30

分散データベースにおける”複製に対する透過性”の説明として,適切なものはどれか。

ア それぞれのサーバのDBMSが異種であっても,プログラムはDBMSの相違を意識する必要がない。

イ 一つの表が複数のサーバに分割されて配置されていても,プログラムは分割された配置を意識する必要がない。

ウ 表が別のサーバに移動されても,プログラムは表が配置されたサーバを意識する必要がない。

エ 複数のサーバに一つの表が重複して存在しても,プログラムは表の重複を意識する必要がない。

正解と解説

正解は”エ”

複製に対する透過性は、複数のサーバに重複してデータがあっても、プログラム側がそれを意識する必要がないという性質です。よって答えはエです。