データベースサーバの電源故障などにより、データベースに障害が発生することがあります。データベースには、障害が発生した場合、特にメモリ上のデータは消えてしまうことがあります。そんな場合でも、データを障害発生の直前に戻す機能が備わっています。
まずは、データの書き込み処理を理解しましょう。データの追加・変更などの処理によって、データの保存には次の3つのアクションがあります。
①SQL操作(UPDATEやDELETEなど)
更新前ログと更新後ログをメモリに書き込みます。ログは、操作の都度記載されます。このときの更新前ログが、ロールバックに活用されます。製品の実装にもよりますが、このログはファイルにも書き込むことでしょう(そうしないと、システム障害時にロールバックできません)。ログファイルはジャーナルファイル(Oracleの場合はREDOログ)と言われます。
②コミット(COMMIT)を実行
変更を確定します。このとき、確定した変更内容をログに書き込みます。この変更後のログファイルがロールフォワードに活用されます。※このとき、先ほどのSQL操作で一時保存していた更新前ログなどは不要になるので破棄されます。
③チェックポイント時
コミットによって作成された確定のログファイルを、ディスクのデータベースに書き込みます。
このような3つのアクションに分けず、いきなりデータベースに書き込んでもいいという考えもあります。
しかし、ディスクに書き込む処理には時間がかかりますので非効率です。そこで、メモリ上に書き込むのです。そして、データベース上のデータの確定保存するには、コミット(COMMIT)という命令を実行します。これによって、ディスク上のログに書き込みが確定され、データの更新が確定します。
しかし、この時点でも、まだディスクのデータベースには書き込まれません。実際に書き込まれるのはチェックポイントというタイミングです。
このあたりの動作は製品によって異なります。資料としては以下が分かりやすいです。
https://www.atmarkit.co.jp/ait/articles/1107/01/news140_2.html
■ロールバック
トランザクションが途中で終了している場合、データの不整合が起こる可能性があります。(不整合の例は以下に記載しました。
http://sm.seeeko.com/archives/15876944.html )
そこで、ログファイルの更新前情報を使ってトランザクションを元に戻します。
過去問(H28秋SM午前2問13)では、「データベースのロールバック処理の説明」として、「ログの更新前情報を用いて,トランザクション開始直前の状態にデータを復元させる」とあります。
■ロールフォワード
トランザクションはすでに完了しています。チェックポイントが来ていない場合において、ディスクにはデータが反映されていません。そこで、ログファイルの更新後情報を使ってディスクに書き込みをすれば、最新の状態になります。
ロールフォワードは「ログの更新後情報を用いて,トランザクション開始後の障害直前の状態にデータを復元させる(H28秋SM午前2問13不正解選択肢)」ことです。
次のT1~T3の3つのトランザクションで考えます。
T1の場合、トランザクションが終了し、チェックポイントが過ぎています。データはディスクに反映されていますから、何も処理する必要はありません。
T2ですが、トランザクションが途中で終了しています。データの不整合が起こる可能性がありますから、ログファイルの更新前情報を使ってトランザクションを元に戻します。この処理をロールバックと言います。
最後にT3ですが、トランザクションはすでに完了しています。チェックポイントが来ていないので、ディスクにはデータが反映されていません。そこで、ログファイルの更新後情報を使ってディスクに書き込みをすれば、最新の状態(障害直前の状態)になります。この処理をロールフォワードと言います。
過去問(H16春FE午後問2)にて、データベースの障害回復機能の問題があるので紹介します。
この問題を解いてみるといいでしょう。
H28春AP午前
↓
↓
↓
↓
↓
正解は、イです。
↓
↓
↓
↓
↓
正解は、エです。
H27秋AP午前
↓
↓
↓
↓
↓
ロールフォワードなので、コミット後のログの更新後情報を用います。
障害発生前にコミットしているのはT4とT5の2つです。
正解は、ウです。
H26春AP午前
(H21春AP午前 問33と同じ)
↓
↓
↓
↓
↓
正解は、イです。
H28秋AP午前問30
↓
↓
↓
↓
↓
T1は無事にチェックポイントを終えているので、ディスクのDBに反映済みです。何もする必要はありません。
T2とT5はコミットしているので、ロールフォワードしましょう。
T3、T4はReadだけなので、何もする必要はありません。
T6は、書き込みをしているので、整合性を保つためにも更新前情報でロールバックします。
正解は、アです。
まずは、データの書き込み処理を理解しましょう。データの追加・変更などの処理によって、データの保存には次の3つのアクションがあります。
①SQL操作(UPDATEやDELETEなど)
更新前ログと更新後ログをメモリに書き込みます。ログは、操作の都度記載されます。このときの更新前ログが、ロールバックに活用されます。製品の実装にもよりますが、このログはファイルにも書き込むことでしょう(そうしないと、システム障害時にロールバックできません)。ログファイルはジャーナルファイル(Oracleの場合はREDOログ)と言われます。
②コミット(COMMIT)を実行
変更を確定します。このとき、確定した変更内容をログに書き込みます。この変更後のログファイルがロールフォワードに活用されます。※このとき、先ほどのSQL操作で一時保存していた更新前ログなどは不要になるので破棄されます。
③チェックポイント時
コミットによって作成された確定のログファイルを、ディスクのデータベースに書き込みます。
このような3つのアクションに分けず、いきなりデータベースに書き込んでもいいという考えもあります。
しかし、ディスクに書き込む処理には時間がかかりますので非効率です。そこで、メモリ上に書き込むのです。そして、データベース上のデータの確定保存するには、コミット(COMMIT)という命令を実行します。これによって、ディスク上のログに書き込みが確定され、データの更新が確定します。
しかし、この時点でも、まだディスクのデータベースには書き込まれません。実際に書き込まれるのはチェックポイントというタイミングです。
このあたりの動作は製品によって異なります。資料としては以下が分かりやすいです。
https://www.atmarkit.co.jp/ait/articles/1107/01/news140_2.html
■ロールバック
トランザクションが途中で終了している場合、データの不整合が起こる可能性があります。(不整合の例は以下に記載しました。
http://sm.seeeko.com/archives/15876944.html )
そこで、ログファイルの更新前情報を使ってトランザクションを元に戻します。
過去問(H28秋SM午前2問13)では、「データベースのロールバック処理の説明」として、「ログの更新前情報を用いて,トランザクション開始直前の状態にデータを復元させる」とあります。
■ロールフォワード
トランザクションはすでに完了しています。チェックポイントが来ていない場合において、ディスクにはデータが反映されていません。そこで、ログファイルの更新後情報を使ってディスクに書き込みをすれば、最新の状態になります。
ロールフォワードは「ログの更新後情報を用いて,トランザクション開始後の障害直前の状態にデータを復元させる(H28秋SM午前2問13不正解選択肢)」ことです。
次のT1~T3の3つのトランザクションで考えます。
T1の場合、トランザクションが終了し、チェックポイントが過ぎています。データはディスクに反映されていますから、何も処理する必要はありません。
T2ですが、トランザクションが途中で終了しています。データの不整合が起こる可能性がありますから、ログファイルの更新前情報を使ってトランザクションを元に戻します。この処理をロールバックと言います。
最後にT3ですが、トランザクションはすでに完了しています。チェックポイントが来ていないので、ディスクにはデータが反映されていません。そこで、ログファイルの更新後情報を使ってディスクに書き込みをすれば、最新の状態(障害直前の状態)になります。この処理をロールフォワードと言います。
過去問(H16春FE午後問2)にて、データベースの障害回復機能の問題があるので紹介します。
この問題を解いてみるといいでしょう。
問2 データベースの障害回復機能に関する次の記述を読んで,設問1~4に答えよ。 あるデータベースシステムでは,定期的にバックアップをとるとともに,更新前情報及び更新後情報をログファイルに記録している。システム障害が発生した場合は,ロールバック処理,ロールフォワード処理及び再処理を組み合わせたウォームスタートで再始動する運用を行っている。 このデータベースシステムでは,チェックポイントで,更新前ログ及び更新後ログヘの情報書出しとデータベースへの書出しを一致させている。したがって,例えばロールバック処理は,ログファイル上の更新前情報を使って,データベースを直前のチェックポイントの時点まで戻すことによって,整合性を保つ。 |
H28春AP午前
問28 トランザクションA(処理A1→処理A2 順に実行する)とトランザクションB(処理B1→処理B2 順に実行する)が,データベースの資源SとTに対し,次のように処理A1→処理B1→処理A2→処理B2 順で専有ロックを要求する場合,デッドロックが発生する資源の組合せはどれか。 なお,ロックは処理開始時にかけ,トランザクション終了時に解除する。 |
↓
↓
↓
↓
正解は、イです。
問30 媒体障害の回復において,最新のデータベースのバックアップをリストアした後に,トランザクションログを用いて行う操作はどれか。 ア バックアップ取得後でコミット前に中断した全てのトランザクションをロールバックする。 イ バックアップ取得後でコミット前に中断した全てのトランザクションをロールフォワードする。 ウ バックアップ取得後にコミットした全てのトランザクションをロールバックする。 エ バックアップ取得後にコミットした全てのトランザクションをロールフォワードする。 |
↓
↓
↓
↓
正解は、エです。
H27秋AP午前
問30 チェックポイントを取得するDBMSにおいて,図のような時間経過でシステム障害が発生した。前進復帰(ロールフォワード)によって障害回復できるトランザクションだけを全て挙げたものはどれか。 |
↓
↓
↓
↓
ロールフォワードなので、コミット後のログの更新後情報を用います。
障害発生前にコミットしているのはT4とT5の2つです。
正解は、ウです。
H26春AP午前
(H21春AP午前 問33と同じ)
問29 分散データベースにおいて図のようなコマンドシーケンスがあった。調停者がシーケンス a で発行したコマンドはどれか。ここで,コマンドシーケンスの記述にUMLのシーケンス図の記法を用いる。 ア COMMITの実行要求 イ ROLLBACKの実行要求 ウ 判定レコードの書出し要求 エ ログ書出しの実行要求 |
↓
↓
↓
↓
正解は、イです。
H28秋AP午前問30
問30 DBMSをシステム障害発生後に再立上げするとき,ロールフォワードすべきトランザクションとロールバックすべきトランザクションの組合せとして,適切なものはどれか。ここで,トランザクションの中で実行される処理内容は次のとおりとする。
|
↓
↓
↓
↓
T1は無事にチェックポイントを終えているので、ディスクのDBに反映済みです。何もする必要はありません。
T2とT5はコミットしているので、ロールフォワードしましょう。
T3、T4はReadだけなので、何もする必要はありません。
T6は、書き込みをしているので、整合性を保つためにも更新前情報でロールバックします。
正解は、アです。
コメント