Condividi tramite


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 è detto log non effimero.

Si supponga di eseguire transazioni in un database e ogni transazione abbia diversi aggiornamenti descritti dai record di log. Dopo il commit di una particolare transazione e la scrittura in una risorsa di archiviazione stabile, potrebbero non essere più necessari i record di log che descrivono 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 andarsi 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 clienti (il loro software). È possibile monitorare l'archiviazione che hai fatto impostando la coda dell'archivio del log. La coda dell'archivio è il numero di sequenza del log (LSN) del record più vecchio per cui l'archiviazione non è ancora stata completata.

Un registro non effimero ha effettivamente due code: una contrassegnata dall'LSN di base e una dalla coda di archivio. È possibile posizionare le due code nel modo desiderato chiamando ClfsAdvanceLogBase (o ClfsWriteRestartArea) e ClfsSetArchiveTail. In genere, l'LSN di base punta al record meno recente necessario per il rollback o il ripristino delle transazioni, mentre la coda dell'archivio punta al record meno recente per cui l'archiviazione non è stata ancora eseguita. La parte finale dell'archivio potrebbe essere minore dell'LSN di base o potrebbe essere maggiore dell'LSN di base.

L'LSN di base e la coda di archiviazione sono importanti quando si chiama ripetutamente ClfsReadNextLogRecord per leggere una catena di record collegati da LSN precedenti, undo-next LSN o LSN utente. ClfsReadNextLogRecord non legge 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 coda di archiviazione e l'LSN di base. Per ulteriori informazioni sulle catene di record successive, vedere Lettura di record di dati da un flusso CLFS.

Vedere anche

ClfsAdvanceLogBase

ClfsCreateLogFile

ClfsReadNextLogRecord

ClfsSetArchiveTail

ClfsWriteRestartArea

Lettura di record di dati da un flusso CLFS