Lettura di record di dati da un flusso CLFS

Esistono due tipi di record in un flusso CLFS (Common Log File System): record di dati e record di riavvio. Questo articolo illustra come leggere una sequenza di record di dati da un flusso. Per informazioni su come leggere i record di riavvio, vedere Lettura dei record di riavvio da un flusso CLFS.

Esistono diverse varianti per la lettura di una sequenza di record di dati da un flusso. È possibile leggere in avanti nel flusso da un record specificato oppure leggere all'indietro lungo una catena di record collegati.

Per tutte le varianti durante la lettura di una sequenza di record di dati, completare i passaggi seguenti.

  1. Chiamare ClfsReadLogRecord per ottenere un contesto di lettura e il primo record di dati nella sequenza.

  2. Passare ripetutamente il contesto di lettura ottenuto nel passaggio 1 a ClfsReadNextLogRecord per ottenere i record di dati rimanenti nella sequenza.

Attenzione

I contesti di lettura non sono sicuri per i thread. I client sono responsabili della serializzazione dell'accesso ai contesti di lettura.

Gli argomenti secondari seguenti illustrano i dettagli della lettura dei diversi tipi di sequenze di record e catene.

Lettura in avanti da un record di dati specificato

Per leggere in avanti in un flusso CLFS (a partire dal record di dati preferito), è necessario creare un contesto di lettura con la relativa modalità impostata su ClfsContextForward. Per creare un contesto di lettura e leggere il primo record (nel set che si è scelto di leggere), chiamare ClfsReadLogRecord come illustrato nella tabella seguente.

Nome del parametro Value
pvMarshalContext Fornire un puntatore a un'area di marshalling.
plsnFirst Specificare l'LSN del primo record da leggere. Deve essere l'LSN di un record di dati, non un record di riavvio.
peContextMode Specificare il valore ClfsContextForward.
ppvReadBuffer Ricevi il dato del record.
pcbReadBuffer Ricevere le dimensioni dei dati del record.
peRecordType Ricevere il tipo di record. Questo valore è un set di flag (indicatori) che indicano varie caratteristiche del record. Il record è un record di dati, quindi il valore ricevuto deve avere il flag ClfsDataRecord impostato e il flag ClfsRestartRecord deselezionato.
plsnUndoNext Ricevi l'LSN del passo successivo di annullamento del record di dati. Questo valore non è necessario per continuare a leggere la catena, quindi è possibile ignorarlo.
plsnPrevious Ricevere l'LSN precedente del record di dati. Questo valore non è necessario per continuare a leggere la catena, quindi è possibile ignorarlo.
ppvReadContext Ricevi un puntatore a un contesto di lettura opaco. Usare il contesto di lettura per leggere i record successivi.

Dopo aver ottenuto il contesto di lettura e il primo record, è possibile ottenere i record successivi nel flusso chiamando ripetutamente ClfsReadNextLogRecord . Quando nel flusso non sono presenti altri record di dati, ClfsReadNextLogRecord restituisce STATUS_END_OF_FILE. Nella tabella seguente viene illustrato come impostare e interpretare i parametri.

Nome del parametro Value
pvReadContext Fornisci un puntatore al contesto di lettura ricevuto da ClfsReadLogRecord.
ppvBuffer Ricevi i dati della registrazione.
pcbBuffer Ricevi la dimensione dei dati di un record.
peRecordType Specificare il valore di ClfsDataRecord.
plsnUndoNext Ricevere il campo LSN di annullamento successivo del record di dati. Questo valore non è necessario per continuare a leggere la catena, quindi è possibile ignorarlo.
plsnPrevious Ricevere il campo LSN precedente del record di dati. Questo valore non è necessario per continuare a leggere la catena, quindi è possibile ignorarlo.
plsnRecord Ricevere l'LSN del record di dati letto.

Lettura di una catena di record di dati collegati dall'LSN precedente

Quando si scrive un record di dati in un flusso CLFS, è possibile impostare l'LSN precedente del record di dati sull'LSN di qualsiasi record scritto in precedenza nel flusso. Impostando l'LSN precedente, è possibile creare una catena di record correlati che in un secondo momento possono essere attraversati in ordine inverso. Si supponga, ad esempio, di eseguire una transazione di database e di scrivere diversi record di log CLFS per descrivere gli aggiornamenti eseguiti dalla transazione. Ogni volta che si scrive un record di log che descrive un aggiornamento delle transazioni, è possibile impostare l'LSN precedente del record sull'LSN del record di log precedente che descrive un aggiornamento eseguito dalla stessa transazione.

Si supponga di aver scritto una catena di record di dati collegati dai loro LSN precedenti. Per leggere la catena di record, è necessario creare un contesto di lettura con la relativa modalità impostata su ClfsContextPrevious. Per creare un contesto di lettura e leggere il primo record nella catena, chiamare ClfsReadLogRecord come illustrato nella tabella seguente.

Nome del parametro Value
pvMarshalContext Fornire un puntatore a un'area di marshalling.
plsnFirst Specificare l'LSN del primo record nella catena. Deve essere l'LSN di un record di dati, non un record di riavvio.
peContextMode Specificare il valore di ClfsContextPrevious.
ppvReadBuffer Ricevi i dati del record.
pcbReadBuffer Ottieni le dimensioni dei dati del record.
peRecordType Ricevi il tipo di record. Questo valore è un insieme di indicatori che indicano varie caratteristiche del record. Il record è un record di dati, quindi il valore ricevuto deve avere il flag ClfsDataRecord impostato e il flag ClfsRestartRecord deselezionato.
plsnUndoNext L'LSN successivo per l'annullamento del record di dati verrà ricevuto. Questo valore non è necessario per continuare a leggere la catena, quindi è possibile ignorarlo.
plsnPrevious Ricevere l'LSN precedente del record di dati. Questo valore non è necessario per continuare a leggere la catena, quindi è possibile ignorarlo.
ppvReadContext Ricevi un puntatore a un contesto di lettura opaco. Utilizzare il contesto di lettura per consultare i record precedenti nella catena.

Dopo aver ottenuto il contesto di lettura e il primo record, è possibile leggere i record rimanenti nella catena chiamando ripetutamente ClfsReadNextLogRecord . Nella tabella seguente viene illustrato come impostare e interpretare i parametri.

Nome del parametro Value
pvReadContext Fornisci un puntatore al contesto di lettura ricevuto da ClfsReadLogRecord.
ppvBuffer Ricevi i dati del record.
pcbBuffer Ottieni le dimensioni dei dati del record.
peRecordType Specificare il valore di ClfsDataRecord.
plsnUndoNext L'LSN successivo per l'annullamento del record di dati verrà ricevuto. Questo valore non è necessario per continuare a leggere la catena, quindi è possibile ignorarlo.
plsnPrevious Ricevere l'LSN precedente del record di dati. Questo valore non è necessario per continuare a leggere la catena, quindi è possibile ignorarlo.
plsnRecord Ricevere l'LSN del record di dati letto.

Quando si effettuano chiamate ripetute a ClfsReadNextLogRecord, la sequenza di chiamate termina in uno dei modi seguenti.

  • Alla fine si legge un record di dati con il relativo LSN precedente impostato su CLFS_LSN_INVALID. Alla successiva chiamata a ClfsReadNextLogRecord, verrà restituito STATUS_END_OF_FILE.

  • Alla fine si legge un record di dati con un LSN precedente che è minore sia dell'LSN di base del flusso che della parte finale di archiviazione del flusso. Alla successiva chiamata a ClfsReadNextLogRecord, verrà restituito STATUS_LOG_START_OF_LOG.

Lettura di una catena di record di dati collegati dal LSN undo-next

Quando si scrive un record di dati in un flusso CLFS, è possibile impostare l'LSN di annullamento successivo del record di dati sull'LSN di qualsiasi record scritto in precedenza nel flusso. Impostando l'LSN di annullamento successivo, è possibile creare una catena di record correlati che possono essere attraversati in ordine inverso. Per altre informazioni sulla creazione e l'interpretazione delle catene di annullamento successive, vedere Numeri di sequenza di log CLFS.

Si supponga di aver scritto una catena di record di dati collegati dai loro LSN annullabili. Per leggere la catena di record, è necessario chiamare ClfsReadLogRecord per creare un contesto di lettura con la relativa modalità impostata su ClfsContextUndoNext. Successivamente, il processo è identico alla lettura di una catena connessa da LSN precedenti (descritta in precedenza in questo articolo).

Lettura di una catena di record di dati collegati dall'utente LSN

Oltre alle catene collegate da LSN precedenti e undo-next LSN, è possibile creare catene collegate da LSN personalizzate che vengono incorporate nei dati del record dall'utente.

Supponiamo di aver scritto una catena di record di dati collegati da LSN archiviati nei dati del record stesso. Per leggere la catena di record, è necessario creare un contesto di lettura con la relativa modalità impostata su ClfsContextPrevious o ClfsContextUndoNext. Creare il contesto di lettura e ottenere il record più recentemente scritto nella sequenza chiamando ClfsReadLogRecord. Chiamare quindi ripetutamente ClfsReadNextLogRecord per ottenere i record precedenti nella catena. Ogni volta che si chiama ClfsReadNextLogRecord, impostare il parametro plsnUser sul valore LSN del record precedente nella catena. Il LSN specificato in plsnUser sovrascrive tutti i valori archiviati nei campi precedente-LSN o undo-next LSN del record corrente.

È possibile spostarsi all'indietro nel flusso solo quando si chiama ClfsReadNextLogRecord per leggere una catena di record. Il LSN fornito in plsnUser deve essere inferiore all'LSN del record corrente nella catena.

Vedere anche

coda di archiviazione

Numeri di sequenza di log CLFS

ClfsReadLogRecord

ClfsReadNextLogRecord

Lettura dei record di riavvio da un flusso CLFS