データベース ロギングとデータベース ジャーナル ファイルについて調べます。
データベース (Oracle など) は、非常に堅牢なファイル書き込み機能を備えています。実際には Oracle を使用しないでください。彼らのデザインパターンを使用してください。デザインパターンはこんな感じ。これらのアイデアは、実際に製品を使用しなくても借りることができます。
トランザクション (挿入) は、更新するブロックを取得します。通常、これはメモリ キャッシュにあります。そうでない場合は、ディスクからメモリ キャッシュに読み込まれます。
「前のイメージ」(またはロールバック セグメント) のコピーは、これから書き込もうとしているブロックから作成されます。
キャッシュ コピーを変更し、ジャーナル エントリを書き込み、DB 書き込みをキューに入れます。
変更をコミットすると、キャッシュの変更が他のトランザクションから見えるようになります。
ある時点で、DB ライターは DB ファイルの変更を確定します。
ジャーナルは、単純な循環キュー ファイルです。レコードは、構造がほとんどない単なる変更の履歴です。複数のデバイスで複製できます。
DB ファイルはより複雑な構造です。それらには「トランザクション番号」があります。これは、トランザクション全体の単純な連続カウントです。これはブロックにエンコードされ (2 つの異なる方法で)、制御ファイルに書き込まれます。
優れた DBA は、制御ファイルがデバイス間で複製されることを保証します。
Oracle は、起動時に制御ファイルをチェックして、正しいと思われるファイルを見つけます。その他は破損している可能性があります。Oracle は DB ファイルをチェックして、制御ファイルと一致するものを確認します。ジャーナルをチェックして、ファイルを正しいトランザクション番号にするためにトランザクションを適用する必要があるかどうかを確認します。
もちろん、すべてのジャーナル コピーを書き込んでいるときにクラッシュした場合、そのトランザクションは失われます。それについてできることはあまりありません。ただし、ジャーナル エントリが書き込まれた後にクラッシュした場合は、問題なく正常に回復する可能性があります。
メディアを紛失し、バックアップを復元した場合、復元されたバックアップ ファイルにジャーナル ファイルを適用して最新の状態にできる可能性があります。そうしないと、古いジャーナル ファイルを再生して最新の状態にする必要があります。