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