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 argomento 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 è possibile 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.
Chiamare ClfsReadLogRecord per ottenere un contesto di lettura e il primo record di dati nella sequenza.
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 thread-safe. I client sono responsabili della serializzazione dell'accesso ai contesti di lettura.
I seguenti argomenti secondari 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 CLSF (a partire dal record di dati scelto), è 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 parametro | valore |
---|---|
pvMarshalContext |
Fornire un puntatore a un'area di marshalling. |
plsnFirst |
Specificare l'LSN del primo record da leggere. Deve trattarsi dell'LSN di un record di dati, non di un record di riavvio. |
peContextMode |
Specificare il valore ClfsContextForward. |
ppvReadBuffer |
Ricevere i dati del record. |
pcbReadBuffer |
Ricevere le dimensioni dei dati del record. |
peRecordType |
Ricevere il tipo di record. Questo valore è un set di flag che indicano varie funzionalità del record. Il record è un record di dati, quindi il valore ricevuto deve avere il flag ClfsDataRecord impostato e il flag ClfsRestartRecord deselezionato. |
plsnUndoNext |
Ricevere l'LSN di annullamento successivo 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 |
Ricevere 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 non sono presenti più record di dati nel flusso, ClfsReadNextLogRecord restituisce STATUS_END_OF_FILE. Nella tabella seguente viene illustrato come impostare e interpretare i parametri.
Nome parametro | valore |
---|---|
pvReadContext |
Fornire un puntatore al contesto di lettura ricevuto da ClfsReadLogRecord. |
ppvBuffer |
Ricevere i dati del record. |
pcbBuffer |
Ricevere le dimensioni dei dati del 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 dal 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 seguito 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 relativi 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 parametro | valore |
---|---|
pvMarshalContext |
Fornire un puntatore a un'area di marshalling. |
plsnFirst |
Specificare l'LSN del primo record nella catena. Deve trattarsi dell'LSN di un record di dati, non di un record di riavvio. |
peContextMode |
Specificare il valore di ClfsContextPrevious. |
ppvReadBuffer |
Ricevere i dati del record. |
pcbReadBuffer |
Ricevere le dimensioni dei dati del record. |
peRecordType |
Ricevere il tipo di record. Questo valore è un set di flag che indicano varie funzionalità del record. Il record è un record di dati, quindi il valore ricevuto deve avere il flag ClfsDataRecord impostato e il flag ClfsRestartRecord deselezionato. |
plsnUndoNext |
Ricevere l'LSN di annullamento successivo del record di dati. Non è necessario questo valore per continuare a leggere la catena, quindi è possibile ignorarlo. |
plsnPrevious |
Ricevere l'LSN precedente del record di dati. Non è necessario questo valore per continuare a leggere la catena, quindi è possibile ignorarlo. |
ppvReadContext |
Ricevere un puntatore a un contesto di lettura opaco. Usare il contesto di lettura per leggere i record precedenti nella catena. |
Dopo aver letto 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 parametro | valore |
---|---|
pvReadContext |
Specificare un puntatore al contesto di lettura ricevuto da ClfsReadLogRecord. |
ppvBuffer |
Ricevere i dati del record. |
pcbBuffer |
Ricevere le dimensioni dei dati del record. |
peRecordType |
Specificare il valore di ClfsDataRecord. |
plsnUndoNext |
Ricevere l'LSN di annullamento successivo del record di dati. Non è necessario questo valore per continuare a leggere la catena, quindi è possibile ignorarlo. |
plsnPrevious |
Ricevere l'LSN precedente del record di dati. Non è necessario questo valore 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 leggerà un record di dati con il relativo LSN precedente impostato su CLFS_LSN_INVALID. Al successivo chiamare ClfsReadNextLogRecord, verrà restituito STATUS_END_OF_FILE.
Alla fine si leggerà un record di dati con un LSN precedente minore di LSN di base del flusso e della coda di archiviazione del flusso. Al successivo chiamare ClfsReadNextLogRecord, verrà restituito STATUS_LOG_START_OF_LOG.
Lettura di una catena di record di dati collegati dall'LSN non successivo
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 non 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 non successive, vedere Numeri di sequenza di log CLFS.
Si supponga di aver scritto una catena di record di dati collegati dai loro LSN non successivi. Per leggere la catena di record, è necessario chiamare ClfsReadLogRecord per creare un contesto di lettura impostato su ClfsContextUndoNext. Successivamente, il processo è identico alla lettura di una catena collegata da LSN precedenti (descritta in precedenza in questo argomento).
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 dai propri LSN incorporati nei dati dei record.
Si supponga di aver scritto una catena di record di dati collegati da reti LSN archiviate 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 scritto più di recente nella catena chiamando ClfsReadLogRecord. Chiamare quindi ClfsReadNextLogRecord ripetutamente per ottenere i record precedenti nella catena. Ogni volta che si chiama ClfsReadNextLogRecord, impostare il parametro plsnUser sull'LSN del record precedente nella catena. La rete LSN fornita in plsnUser esegue l'override di tutti i valori archiviati nei campi LSN precedenti-LSN o undo-next LSN.
Si noti che è possibile spostarsi indietro nel flusso solo quando si chiama ClfsReadNextLogRecord per leggere una catena di record. LSN fornito in plsnUser deve essere minore dell'LSN del record corrente nella catena.