CLFS(Common Log File System)는 보관 꼬리를 유지 관리하여 전용 로그에 대한 보관을 지원합니다. ClfsCreateLogFile을 호출하여 전용 로그를 만들 때 fFlagsAndAttributes 매개 변수의 FILE_ATTRIBUTE_ARCHIVE 플래그를 설정하여 CLFS가 로그에 대한 보관 꼬리를 유지하도록 지정할 수 있습니다. CLFS가 보관 꼬리를 유지하는 로그를 임시 로그가 아닌 로그라고 합니다.
데이터베이스에서 트랜잭션을 수행하고 각 트랜잭션에 로그 레코드로 설명된 여러 업데이트가 있다고 가정합니다. 특정 트랜잭션이 커밋되어 안정적인 스토리지에 기록된 후에는 해당 트랜잭션을 설명하는 로그 레코드가 더 이상 필요하지 않을 수 있습니다. 즉, 시스템 오류가 있는 경우 다시 시작 복구 중에 로그 레코드가 필요하지 않습니다. 그러나 데이터베이스를 보유하는 안정적인 스토리지 매체가 실패하고 데이터베이스가 다른 매체에 최근에 보관되지 않은 경우 데이터베이스 업데이트가 손실될 수 있습니다.
앞의 단락에서는 데이터베이스 레코드 보관에 대해 설명하지만 다른 시나리오에서는 로그 레코드를 보관할 수 있습니다. 두 경우 모두 보관은 클라이언트(소프트웨어)의 책임입니다. 로그의 보관 꼬리를 설정하여 수행한 보관을 추적할 수 있습니다. 보관 꼬리는 보관이 아직 완료되지 않은 가장 오래된 레코드의 LSN(로그 시퀀스 번호)입니다.
비 임시 로그에는 실제로 두 개의 꼬리가 있습니다. 하나는 기본 LSN으로 표시되고 다른 하나는 보관 꼬리로 표시됩니다. ClfsAdvanceLogBase(또는 ClfsWriteRestartArea) 및 ClfsSetArchiveTail을 호출하여 두 꼬리를 배치할 수 있습니다. 일반적으로 기본 LSN은 트랜잭션 롤백 또는 다시 시작 복구에 필요한 가장 오래된 레코드를 가리키며 보관 꼬리는 보관이 수행되지 않은 가장 오래된 레코드를 가리킵니다. 보관 꼬리가 기본 LSN보다 작거나 기본 LSN보다 클 수 있습니다.
ClfsReadNextLogRecord를 반복적으로 호출하여 이전 LSN, 'undo-next' LSN 또는 사용자 LSN으로 연결된 레코드 체인을 읽을 때 기본 LSN과 보관 꼬리가 중요합니다. ClfsReadNextLogRecord 는 LSN이 보관 꼬리와 기본 LSN 둘 다보다 작은 레코드를 읽지 않습니다. 그러나 LSN이 보관 꼬리와 기본 LSN 사이에 있는 레코드를 읽습니다. 다음 레코드 체인에 대한 자세한 내용은 CLFS 스트림에서 데이터 레코드 읽기를 참조하세요.