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