データベースのログとデータベースのジャーナルファイルを読み上げてください。
データベース(Oracleなど)は、非常に堅牢なファイル書き込み機能を備えています。実際にOracleを使用しないでください。そのデザインパターンを使用します。デザインパターンは、このようなものになります。実際の製品を使わずにこれらのアイデアを借りることができます。
あなたのトランザクション(すなわち、挿入)は、更新するブロックをフェッチします。通常、これはメモリキャッシュにあり、そうでなければ、ディスクからメモリキャッシュに読み込まれます。
"イメージの前"(またはロールバックセグメント)のコピーは、書き込みしようとしているブロックで作成されます。
キャッシュコピーを変更し、仕訳入力を書き、DB書き込みをキューに入れます。
変更をコミットすると、キャッシュの変更が他のトランザクションから見えるようになります。
ある時点で、DBライターはDBファイルの変更を確定します。
ジャーナルは単純な循環キューファイルです。レコードは単なる構造の変更の履歴です。複数のデバイスに複製することができます。
DBファイルは、より複雑な構造です。彼らは "取引番号"を持っています - 全体的な取引の単純な連続カウント。これは、ブロック(2つの異なる方法)でエンコードされ、制御ファイルに書き込まれます。
優れたDBAは、制御ファイルが複数のデバイスにまたがって複製されることを保証します。
Oracleは起動時に、制御ファイルをチェックして、どちらが正しい可能性が高いかを調べます。その他は壊れている可能性があります。 OracleはDBファイルをチェックして、制御ファイルと一致するものを確認します。ジャーナルをチェックして、ファイルを正しいトランザクション番号まで取得するためにトランザクションを適用する必要があるかどうかを確認します。
もちろん、すべてのジャーナルコピーを書き込んでいる間にクラッシュすると、そのトランザクションは失われます。ただし、ジャーナルエントリが書き込まれた後にクラッシュすると、おそらく問題なく正常に回復します。
メディアを失ってバックアップを回復すると、回復したバックアップファイルにジャーナルファイルを適用して最新の状態にすることができます。それ以外の場合は、古いジャーナルファイルを再生して最新の状態に戻す必要があります。
申し訳ありませんが、私は2番目のオプションをよく理解していません。ディレクトリの名前を変更しています。プロとは何ですか?間隔が最初のものよりも長いようです。 – tingyu
2つ目のオプションでは、1つまたは2つのディレクトリで変更される可能性のあるファイルをグループ化することをお勧めします。ファイルよりもディレクトリが少なくなるので、これはより速くなるはずです。 –