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