Lesen von Datensätzen aus einem CLFS-Stream
In einem CLFS-Stream (Common Log File System) gibt es zwei Arten von Datensätzen: Datensätze und Neustartdatensätze. In diesem Thema wird erläutert, wie eine Sequenz von Datensätzen aus einem Stream gelesen wird. Informationen zum Lesen von Neustartdatensätzen finden Sie unter Lesen von Neustartdatensätzen aus einem CLFS-Stream.
Es gibt mehrere Variationen beim Lesen einer Sequenz von Datensätzen aus einem Stream. Sie können im Stream aus einem angegebenen Datensatz vorwärts lesen oder rückwärts entlang einer Kette verknüpfter Datensätze lesen.
Führen Sie für alle Variationen zum Lesen einer Sequenz von Datensätzen die folgenden Schritte aus.
Rufen Sie ClfsReadLogRecord auf, um einen Lesekontext und den ersten Datensatz in der Sequenz abzurufen.
Übergeben Sie den in Schritt 1 abgerufenen Lesekontext wiederholt an ClfsReadNextLogRecord , um die restlichen Datensätze in der Sequenz abzurufen.
Vorsicht Lesekontexte sind nicht threadsicher. Clients sind für die Serialisierung des Zugriffs auf Lesekontexte verantwortlich.
In den folgenden Unterthemen werden die Details zum Lesen der verschiedenen Typen von Datensatzsequenzen und -ketten erläutert.
Vorwärtslesen aus einem angegebenen Datensatz
Zum Weiterleiten in einem CLSF-Stream (beginnend mit dem datensatz Ihrer Wahl) müssen Sie einen Lesekontext erstellen, dessen Modus auf ClfsContextForward festgelegt ist. Um einen Lesekontext zu erstellen und den ersten Datensatz zu lesen (in dem Satz, den Sie gelesen haben), rufen Sie ClfsReadLogRecord auf, wie in der folgenden Tabelle gezeigt.
Parametername | Wert |
---|---|
pvMarshalContext |
Geben Sie einen Zeiger auf einen Rangierbereich an. |
plsnFirst |
Geben Sie den LSN des ersten Datensatzes an, den Sie lesen möchten. Hierbei muss es sich um den LSN eines Datensatzes und nicht um einen Neustartdatensatz handelt. |
peContextMode |
Geben Sie den Wert ClfsContextForward an. |
ppvReadBuffer |
Erhalten Sie Ihre Datensatzdaten. |
pcbReadBuffer |
Erhalten Sie die Größe Ihrer Datensatzdaten. |
peRecordType |
Erhalten Sie den Datensatztyp. Dieser Wert ist ein Satz von Flags, die verschiedene Features des Datensatzes angeben. Der Datensatz ist ein Datensatz. Daher sollte für den Wert, den Sie erhalten, das ClfsDataRecord-Flag festgelegt und das ClfsRestartRecord-Flag klar sein. |
plsnUndoWeiter |
Empfangen Sie die nächste Undo-Next-LSN des Datensatzes. Sie benötigen diesen Wert nicht, um die Kette weiter zu lesen, sodass Sie ihn ignorieren können. |
plsnPrevious |
Erhalten Sie die vorherige LSN des Datensatzes. Sie benötigen diesen Wert nicht, um die Kette weiter zu lesen, sodass Sie ihn ignorieren können. |
ppvReadContext |
Erhalten Sie einen Zeiger auf einen undurchsichtigen Lesekontext. Verwenden Sie den Lesekontext, um nachfolgende Datensätze zu lesen. |
Nachdem Sie den Lesekontext und den ersten Datensatz abgerufen haben, können Sie nachfolgende Datensätze im Stream abrufen, indem Sie ClfsReadNextLogRecord wiederholt aufrufen. Wenn keine weiteren Datensätze im Stream vorhanden sind, gibt ClfsReadNextLogRecord STATUS_END_OF_FILE zurück. In der folgenden Tabelle wird gezeigt, wie die Parameter festgelegt und interpretiert werden.
Parametername | Wert |
---|---|
pvReadContext |
Geben Sie einen Zeiger auf den Lesekontext an, den Sie von ClfsReadLogRecord erhalten haben. |
ppvBuffer |
Erhalten Sie Ihre Datensatzdaten. |
pcbBuffer |
Erhalten Sie die Größe Ihrer Datensatzdaten. |
peRecordType |
Geben Sie den Wert von ClfsDataRecord an. |
plsnUndoWeiter |
Empfangen Sie das LSN-Feld "Undo-Next" des Datensatzes. Sie benötigen diesen Wert nicht, um die Kette weiter zu lesen, sodass Sie ihn ignorieren können. |
plsnPrevious |
Empfangen Sie das vorherige LSN-Feld des Datensatzes. Sie benötigen diesen Wert nicht, um die Kette weiter zu lesen, sodass Sie ihn ignorieren können. |
plsnRecord |
Empfangen sie den LSN des gelesenen Datensatzes. |
Lesen einer Kette von Datensätzen, die mit dem vorherigen LSN verknüpft sind
Wenn Sie einen Datensatz in einen CLFS-Stream schreiben, können Sie den vorherigen LSN des Datensatzes auf den LSN eines jeden Datensatzes festlegen, den Sie zuvor in den Stream geschrieben haben. Durch Festlegen des vorherigen LSN können Sie eine Kette verwandter Datensätze erstellen, die später in umgekehrter Reihenfolge durchlaufen werden können. Angenommen, Sie führen eine Datenbanktransaktion aus, und Sie müssen mehrere CLFS-Protokolldatensätze schreiben, um die von der Transaktion vorgenommenen Updates zu beschreiben. Jedes Mal, wenn Sie einen Protokolldatensatz schreiben, der eine Transaktionsaktualisierung beschreibt, können Sie den vorherigen LSN des Datensatzes auf den LSN des vorherigen Protokolldatensatzes festlegen, der eine aktualisierung beschreibt, die von derselben Transaktion vorgenommen wurde.
Angenommen, Sie haben eine Kette von Datensätzen geschrieben, die durch ihre vorherigen LSNs verknüpft sind. Zum Lesen der Datensatzkette müssen Sie einen Lesekontext erstellen, dessen Modus auf ClfsContextPrevious festgelegt ist. Um einen Lesekontext zu erstellen und den ersten Datensatz in der Kette zu lesen, rufen Sie ClfsReadLogRecord auf, wie in der folgenden Tabelle gezeigt.
Parametername | Wert |
---|---|
pvMarshalContext |
Geben Sie einen Zeiger auf einen Rangierbereich an. |
plsnFirst |
Geben Sie den LSN des ersten Datensatzes in der Kette an. Hierbei muss es sich um den LSN eines Datensatzes und nicht um einen Neustartdatensatz handelt. |
peContextMode |
Geben Sie den Wert von ClfsContextPrevious an. |
ppvReadBuffer |
Erhalten Sie Ihre Datensatzdaten. |
pcbReadBuffer |
Erhalten Sie die Größe Ihrer Datensatzdaten. |
peRecordType |
Erhalten Sie den Datensatztyp. Dieser Wert ist ein Satz von Flags, die verschiedene Features des Datensatzes angeben. Der Datensatz ist ein Datensatz. Daher sollte für den Wert, den Sie erhalten, das ClfsDataRecord-Flag festgelegt und das ClfsRestartRecord-Flag klar sein. |
plsnUndoWeiter |
Empfangen Sie die nächste Undo-Next-LSN des Datensatzes. Sie benötigen diesen Wert nicht, um die Kette weiter zu lesen, sodass Sie ihn ignorieren können. |
plsnPrevious |
Erhalten Sie die vorherige LSN des Datensatzes. Sie benötigen diesen Wert nicht, um die Kette weiter zu lesen, sodass Sie ihn ignorieren können. |
ppvReadContext |
Erhalten Sie einen Zeiger auf einen undurchsichtigen Lesekontext. Verwenden Sie den Lesekontext, um die vorherigen Datensätze in der Kette zu lesen. |
Nachdem Sie über den Lesekontext und den ersten Datensatz verfügen, können Sie die verbleibenden Datensätze in der Kette lesen, indem Sie ClfsReadNextLogRecord wiederholt aufrufen. In der folgenden Tabelle wird gezeigt, wie die Parameter festgelegt und interpretiert werden.
Parametername | Wert |
---|---|
pvReadContext |
Geben Sie einen Zeiger auf den Lesekontext an, den Sie von ClfsReadLogRecord erhalten haben. |
ppvBuffer |
Erhalten Sie Ihre Datensatzdaten. |
pcbBuffer |
Erhalten Sie die Größe Ihrer Datensatzdaten. |
peRecordType |
Geben Sie den Wert von ClfsDataRecord an. |
plsnUndoWeiter |
Empfangen Sie die nächste Undo-Next-LSN des Datensatzes. Sie benötigen diesen Wert nicht, um die Kette weiter zu lesen, sodass Sie ihn ignorieren können. |
plsnPrevious |
Erhalten Sie die vorherige LSN des Datensatzes. Sie benötigen diesen Wert nicht, um die Kette weiter zu lesen, sodass Sie ihn ignorieren können. |
plsnRecord |
Empfangen sie den LSN des gelesenen Datensatzes. |
Wenn Sie clfsReadNextLogRecord wiederholt aufrufen, endet Ihre Aufruffolge auf eine der folgenden Arten.
Schließlich lesen Sie einen Datensatz, dessen vorheriger LSN auf CLFS_LSN_INVALID festgelegt ist. Beim nächsten Aufrufen von ClfsReadNextLogRecord wird STATUS_END_OF_FILE zurückgegeben.
Schließlich lesen Sie einen Datensatz mit einem vorherigen LSN, der kleiner als der Basis-LSN des Datenstroms und des Archivendes des Datenstroms ist. Beim nächsten Aufrufen von ClfsReadNextLogRecord wird STATUS_LOG_START_OF_LOG zurückgegeben.
Lesen einer Kette von Datensätzen, die durch den LSN zum Rückgängigmachen verknüpft sind
Wenn Sie einen Datensatz in einen CLFS-Stream schreiben, können Sie die nächste LSN des Datensatzes rückgängig auf den LSN eines datensatzes festlegen, den Sie zuvor in den Stream geschrieben haben. Durch Festlegen des Undo-Next-LSN können Sie eine Kette verwandter Datensätze erstellen, die in umgekehrter Reihenfolge durchlaufen werden können. Weitere Informationen zum Erstellen und Interpretieren von Undo-Next-Ketten finden Sie unter CLFS-Protokollsequenznummern.
Angenommen, Sie haben eine Kette von Datensätzen geschrieben, die durch ihre undo-next-LSNs verknüpft sind. Zum Lesen der Datensatzkette müssen Sie ClfsReadLogRecord aufrufen, um einen Lesekontext zu erstellen, dessen Modus auf ClfsContextUndoNext festgelegt ist. Danach ist der Prozess identisch mit dem Lesen einer Kette, die durch frühere LSNs verknüpft ist (zuvor in diesem Thema beschrieben).
Lesen einer Kette von Datensätzen, die vom LSN des Benutzers verknüpft sind
Zusätzlich zu Ketten, die durch vorherige LSNs und Uno-Next-LSNs verknüpft sind, können Sie Ketten erstellen, die durch Ihre eigenen LSNs verknüpft sind, die Sie in Ihre Datensatzdaten einbetten.
Angenommen, Sie haben eine Kette von Datensätzen geschrieben, die durch LSNs verknüpft sind, die Sie selbst in den Datensatzdaten gespeichert haben. Zum Lesen der Datensatzkette müssen Sie einen Lesekontext erstellen, dessen Modus entweder auf ClfsContextPrevious oder ClfsContextUndoNext festgelegt ist. Erstellen Sie Ihren Lesekontext, und rufen Sie den zuletzt geschriebenen Datensatz in der Kette ab, indem Sie ClfsReadLogRecord aufrufen. Rufen Sie dann ClfsReadNextLogRecord wiederholt auf, um die vorherigen Datensätze in der Kette abzurufen. Legen Sie bei jedem Aufruf von ClfsReadNextLogRecord den plsnUser-Parameter auf den LSN des vorherigen Datensatzes in Ihrer Kette fest. Der LSN, den Sie in plsnUser angeben, setzt alle Werte außer Kraft, die in den LSN-Feldern previous-LSN oder undo-next des aktuellen Datensatzes gespeichert sind.
Beachten Sie, dass Sie im Stream nur rückwärts wechseln können, wenn Sie ClfsReadNextLogRecord aufrufen, um eine Datensatzkette zu lesen. Der LSN, den Sie in plsnUser bereitstellen, muss kleiner als der LSN des aktuellen Datensatzes in der Kette sein.