3. データベースの復旧時間
では、通常データベースの復旧時間はどのように決まるのでしょうか?Indirect Checkpointのしくみを説明するまえに、いったんおさらいしておきましょう。
データベースの復旧時間は、主にRedoデータとUndoデータ (高速復旧が利用できない場合*) がどれほど存在するかによって決まります。これは、最後のチェックポイント以後に行われた処理の量と、データベースがクラッシュした時点でアクティブであったトランザクションによって既に行われていた処理の量によって決まりまるということです。*高速復旧は、Enterprise Editionでのみ利用可能です。また、復旧モデルが完全復旧モデルで、かつ完全バックアップが採取された後でなければなりません。
もう少し詳細に説明すると、Redoデータとは、データベースがクラッシュした時点では、トランザクションは完了していたが、データファイルにはまだメモリの内容が書き込まれていなかったデータのことです。トランザクションログには、どのようにデータを変更したかが記録されているので、復旧処理ではトランザクションログを読み取って、Redoデータを作成しトランザクションの再実行を行うことができるのです。この復旧処理における再実行処理をRedo処理と呼び、Redo処理はRedoデータが多いと処理に時間がかかります。
通常は、データファイルへの書き込みはチェックポイントのタイミングでメモリの内容が一括フラッシュされます。つまり、Redoデータの量は、チェックポイントが実行されてからどれほどのデータが変更されたかによって大きく異なります。
例えば、チェックポイントが実行された直後にクラッシュしたような場合は、変更のあったメモリの内容のほとんどがデータファイルに書き込まれていると想定されるためRedo処理の時間は短くなると想定されますが、チェックポイントが実行されてから次のチェックポイントが実行される直前にクラッシュしたような場合は、Redo処理が長くなると想定されます。
Undoデータとは、データベースがクラッシュした時点ではトランザクションが完了していなかったデータです。トランザクションログには、トランザクションの開始と終了が記録されているので、復旧処理ではトランザクションログを読み取って、Undoデータを作成し未解決のトランザクションをロールバックします。この復旧処理におけるロールバック処理をUndo処理と呼び、Undo処理はUndoデータが多いと処理に時間がかかります。
つまり、Undoデータは、クラッシュした時点で完了していなかったトランザクションがどれほどデータを変更していたか (つまり、どれほどのデータをロールバックしなければならないか) によって異なります。