Supporto CLFS per l'archiviazione
Common Log File System (CLFS) supporta l'archiviazione per i log dedicati mantenendo una coda di archiviazione. Quando si chiama ClfsCreateLogFile per creare un log dedicato, è possibile impostare il flag FILE_ATTRIBUTE_ARCHIVE del parametro fFlagsAndAttributes per specificare che CLFS deve mantenere una coda di archiviazione per il log. Un log per il quale CLFS gestisce una coda di archiviazione è denominato log non temporaneo.
Si supponga di eseguire transazioni in un database e ogni transazione disponga di diversi aggiornamenti descritti dai record di log. Dopo il commit e la scrittura di una determinata transazione in una risorsa di archiviazione stabile, potrebbero non essere necessari i record di log che descrivono più tale transazione. Ciò significa che i record di log non sarebbero necessari durante il ripristino del riavvio in caso di errore di sistema. Tuttavia, se il supporto di archiviazione stabile che contiene il database ha esito negativo e il database non è stato archiviato di recente in un supporto diverso, gli aggiornamenti del database potrebbero andare persi.
Il paragrafo precedente descrive l'archiviazione dei record di database, ma in altri scenari è possibile archiviare i record di log. In entrambi i casi, l'archiviazione è responsabilità dei client (software). È possibile tenere traccia dell'archiviazione eseguita impostando la parte finale dell'archivio del log. La parte finale dell'archivio è il numero di sequenza del log (LSN) del record meno recente per cui l'archiviazione non è ancora stata completata.
Un log non temporaneo ha in realtà due code: una contrassegnata dall'LSN di base e una contrassegnata dalla coda di archiviazione. È possibile posizionare le due code in base alle esigenze chiamando ClfsAdvanceLogBase (o ClfsWriteRestartArea) e ClfsSetArchiveTail. In genere l'LSN di base punta al record meno recente che sarebbe ancora necessario per il ripristino di rollback o riavvio della transazione e la parte finale dell'archivio punta al record meno recente per cui l'archiviazione non è stata eseguita. Si noti che la parte finale dell'archivio potrebbe essere minore dell'LSN di base o potrebbe essere maggiore dell'LSN di base.
LSN di base e la parte finale dell'archivio sono importanti quando si chiama ClfsReadNextLogRecord ripetutamente per leggere una catena di record collegati da LSN precedenti, LSN, undo-next LSN o LSN utente. ClfsReadNextLogRecord non leggerà un record il cui LSN è minore della coda di archiviazione e dell'LSN di base. Leggerà tuttavia un record il cui LSN è compreso tra la parte finale dell'archivio e l'LSN di base. Per altre informazioni sulle catene di record seguenti, vedere Lettura di record di dati da un flusso CLFS.