アーカイブの CLFS サポート
Common Log File System (CLFS) では、アーカイブ末尾をメインすることで、専用ログのアーカイブがサポートされます。 ClfsCreateLogFileを呼び出して専用ログを作成する場合は、fFlagsAndAttributesパラメーターのFILE_ATTRIBUTE_ARCHIVEフラグを設定して、CLFS がログのアーカイブ テールを保持するように指定できます。 CLFS メインアーカイブ・テールを含むログは、非エフェメラル・ログと呼ばれます。
データベース上でトランザクションを実行しており、各トランザクションにはログ レコードによって記述されるいくつかの更新があるとします。 特定のトランザクションがコミットされ、安定したストレージに書き込まれた後は、そのトランザクションを説明するログ レコードが必要なくなる場合があります。 つまり、システム障害発生時の再起動回復中にログ レコードは必要ありません。 ただし、データベースを保持する安定したストレージ メディアが失敗し、データベースが最近別のメディアにアーカイブされていない場合、データベースの更新が失われる可能性があります。
前の段落ではデータベース レコードのアーカイブについて説明しましたが、他のシナリオではログ レコードをアーカイブする必要がある場合もあります。 いずれの場合も、アーカイブはクライアント(ソフトウェア)の責任です。 ログのアーカイブ末尾を設定することで、実行したアーカイブを追跡できます。 アーカイブ末尾は、アーカイブがまだ完了していない最も古いレコードのログ シーケンス番号 (LSN) です。
非一時的なログには、実際には 2 つの末尾があります。1 つはベース LSN でマークされ、1 つはアーカイブ末尾でマークされます。 ClfsAdvanceLogBase(または ClfsWriteRestartArea) と ClfsSetArchiveTailを呼び出すことで、2 つのテールを適切に配置することができます。 通常、ベース LSN はトランザクションのロールバックまたは再開の復旧に必要な最も古いレコードを指し、アーカイブ末尾はアーカイブが実行されていない最も古いレコードを指します。 アーカイブの末尾は、ベース LSN より小さい場合もあれば、ベース LSN よりも大きい場合もあることに注意してください。
ベース LSN とアーカイブの末尾は、ClfsReadNextLogRecord を繰り返し呼び出して、以前の LSN、元に戻す次の LSN、またはユーザー LSN によってリンクされたレコードのチェーンを読み取るときに重要です。 ClfsReadNextLogRecord は、LSN がアーカイブ末尾とベース LSN の両方より小さいレコードを読み取りません。 ただし、アーカイブ末尾とベース LSN の間に LSN があるレコードを読み取ります。 レコード チェーンのフォローの詳細については、CLFS ストリームからのデータ レコードの読み取りを参照してください。