Distributed-dbms-database-recovery
分散DBMS-データベースの回復
データベース障害から回復するために、データベース管理システムは多くの回復管理技術に頼っています。 この章では、データベースリカバリのさまざまなアプローチについて学習します。
データベース回復のための典型的な戦略は次のとおりです-
- データベースの不整合をもたらすソフト障害の場合、回復戦略にはトランザクションの取り消しまたはロールバックが含まれます。 ただし、トランザクションの一貫した状態に回復するために、トランザクションREDOが採用される場合もあります。
- データベースに大きな損害をもたらすハード障害の場合、リカバリ戦略には、アーカイブバックアップからデータベースの過去のコピーを復元することが含まれます。 データベースの最新の状態は、トランザクションログからコミットされたトランザクションのやり直し操作を通じて取得されます。
停電からの回復
電源障害により、非永続メモリの情報が失われます。 電源が復旧すると、オペレーティングシステムとデータベース管理システムが再起動します。 回復マネージャーは、トランザクションログから回復を開始します。
即時更新モードの場合、リカバリマネージャは次のアクションを実行します-
- アクティブリストと失敗リストにあるトランザクションは取り消され、中止リストに書き込まれます。
- コミット前リストにあるトランザクションはやり直されます。
- コミットリストまたはアボートリストのトランザクションに対してアクションは実行されません。
遅延更新モードの場合、リカバリマネージャは次のアクションを実行します-
- アクティブリストと失敗リストにあるトランザクションは、アボートリストに書き込まれます。 変更はまだディスクに書き込まれていないため、元に戻す操作は必要ありません。
- コミット前リストにあるトランザクションはやり直されます。
- コミットリストまたはアボートリストのトランザクションに対してアクションは実行されません。
ディスク障害からの回復
ディスク障害またはハードクラッシュにより、データベースが完全に失われます。 このハードクラッシュから回復するには、新しいディスクを準備してからオペレーティングシステムを復元し、最後にデータベースのバックアップとトランザクションログを使用してデータベースを回復します。 回復方法は、即時更新モードと遅延更新モードの両方で同じです。
回復マネージャは、次のアクションを取ります-
- コミットリストとコミット前リストのトランザクションはやり直され、トランザクションログのコミットリストに書き込まれます。
- アクティブリストと失敗リストのトランザクションは取り消され、トランザクションログの中止リストに書き込まれます。
チェックポイント
- チェックポイント*は、レコードがバッファからデータベースに書き込まれる時点です。 結果として、システムがクラッシュした場合、リカバリマネージャはチェックポイントの前にコミットされたトランザクションをやり直す必要がありません。 定期的なチェックポイント設定により、復旧プロセスが短縮されます。
チェックポイント手法の2つのタイプは次のとおりです-
- 一貫したチェックポイント設定
- ファジーチェックポイント
一貫したチェックポイント設定
一貫したチェックポイント設定により、チェックポイントでデータベースの一貫したイメージが作成されます。 回復中、最後のチェックポイントの右側にあるトランザクションのみが取り消されるか、やり直されます。 最後の一貫したチェックポイントの左側へのトランザクションは既にコミットされており、再度処理する必要はありません。 チェックポイントのために取られたアクションは-
- アクティブなトランザクションは一時的に中断されます。
- メインメモリバッファの変更はすべてディスクに書き込まれます。
- 「チェックポイント」レコードがトランザクションログに書き込まれます。
- トランザクションログはディスクに書き込まれます。
- 中断されたトランザクションが再開されます。
手順4でトランザクションログもアーカイブされている場合、このチェックポイント設定はディスク障害および電源障害からの回復に役立ちます。それ以外の場合、電源障害のみからの回復に役立ちます。
ファジーチェックポイント
ファジーチェックポイントでは、チェックポイントの時点で、すべてのアクティブなトランザクションがログに書き込まれます。 電源障害が発生した場合、Recovery Managerはチェックポイント以降にアクティブだったトランザクションのみを処理します。 チェックポイントの前にコミットされたトランザクションはディスクに書き込まれるため、やり直す必要はありません。
チェックポイントの例
システムでチェックポイントの時刻はtcheckであり、システムのクラッシュの時刻はtfailであると考えてみましょう。 次のような4つのトランザクションT〜a〜、T〜b〜、T〜c〜、およびT〜d〜があるとします-
- T〜a〜はチェックポイントの前にコミットします。
- T〜b〜はチェックポイントの前に開始され、システムがクラッシュする前にコミットします。
- T〜c〜はチェックポイントの後に開始され、システムがクラッシュする前にコミットします。
- T〜d〜はチェックポイントの後に開始され、システムクラッシュ時にアクティブでした。
状況は次の図に描かれています-
回復マネージャーによって実行されるアクションは次のとおりです-
- T〜a〜では何も行われません。
- トランザクションのやり直しは、T〜b〜およびT〜c〜に対して実行されます。
- T〜d〜に対してトランザクションの取り消しが実行されます。
UNDO/REDOを使用したトランザクション回復
トランザクション回復は、障害から回復するのではなく、障害のあるトランザクションの悪影響を排除するために行われます。 障害のあるトランザクションには、データベースを望ましくない状態に変更したすべてのトランザクションと、障害のあるトランザクションによって書き込まれた値を使用したトランザクションが含まれます。
これらの場合のトランザクション回復は、2段階のプロセスです-
- すべての障害のあるトランザクションおよび障害のあるトランザクションの影響を受ける可能性のあるトランザクションを取り消します。
- 障害はないが、障害のあるトランザクションのために取り消されたすべてのトランザクションをやり直します。
UNDO操作の手順は次のとおりです-
- 障害のあるトランザクションがINSERTを実行した場合、リカバリマネージャは挿入されたデータ項目を削除します。
- 障害のあるトランザクションがDELETEを実行した場合、リカバリマネージャは削除されたデータ項目をログから挿入します。
- 障害のあるトランザクションがUPDATEを実行した場合、リカバリマネージャはログから更新前の値を書き込むことで値を削除します。
REDO操作の手順は次のとおりです-
- トランザクションがINSERTを実行した場合、リカバリマネージャはログから挿入を生成します。
- トランザクションがDELETEを実行した場合、回復マネージャーはログから削除を生成します。
- トランザクションがUPDATEを実行した場合、回復マネージャーはログから更新を生成します。