Bagikan melalui


Membaca Rekaman Data dari Aliran CLFS

Ada dua jenis rekaman dalam aliran Common Log File System (CLFS): rekaman data dan rekaman hidupkan ulang. Topik ini menjelaskan cara membaca urutan rekaman data dari aliran. Untuk informasi tentang cara membaca rekaman hidupkan ulang, lihat Membaca Mulai Ulang Rekaman dari Aliran CLFS.

Ada beberapa variasi tentang membaca urutan rekaman data dari aliran. Anda dapat membaca terusan di aliran dari rekaman tertentu atau Anda dapat membaca mundur di sepanjang rantai rekaman tertaut.

Untuk semua variasi tentang membaca urutan rekaman data, selesaikan langkah-langkah berikut.

  1. Panggil ClfsReadLogRecord untuk mendapatkan konteks baca dan rekaman data pertama dalam urutan.

  2. Teruskan konteks baca yang Anda peroleh di langkah 1 ke ClfsReadNextLogRecord berulang kali untuk mendapatkan rekaman data yang tersisa secara berurutan.

Hati Konteks baca tidak aman untuk utas. Klien bertanggung jawab untuk membuat serial akses ke konteks baca.

Subtopik berikut membahas detail membaca berbagai jenis urutan dan rantai rekaman.

Membaca terusan dari rekaman data tertentu

Untuk meneruskan dalam aliran CLSF (dimulai dari catatan data pilihan Anda), Anda harus membuat konteks baca yang modenya diatur ke ClfsContextForward. Untuk membuat konteks baca dan membaca rekaman pertama (dalam set yang telah Anda pilih untuk dibaca), panggil ClfsReadLogRecord seperti yang diperlihatkan dalam tabel berikut ini.

Nama parameter Nilai

pvMarshalContext

Menyediakan pointer ke area marshalling.

plsnFirst

Berikan LSN dari rekaman pertama yang ingin Anda baca. Ini harus menjadi LSN rekaman data, bukan rekaman hidupkan ulang.

peContextMode

Berikan nilai ClfsContextForward.

ppvReadBuffer

Terima data rekaman Anda.

pcbReadBuffer

Terima ukuran data rekaman Anda.

peRecordType

Terima jenis catatan. Nilai ini adalah sekumpulan bendera yang menunjukkan berbagai fitur rekaman. Rekaman adalah rekaman data, sehingga nilai yang Anda terima harus memiliki set bendera ClfsDataRecord dan bendera ClfsRestartRecord dihapus.

plsnUndoNext

Terima LSN rekaman data urungkan berikutnya. Anda tidak memerlukan nilai ini untuk terus membaca rantai, sehingga Anda dapat mengabaikannya.

plsnPrevious

Terima LSN sebelumnya dari rekaman data. Anda tidak memerlukan nilai ini untuk terus membaca rantai, sehingga Anda dapat mengabaikannya.

ppvReadContext

Menerima penunjuk ke konteks baca buram. Gunakan konteks baca untuk membaca rekaman berikutnya.

Setelah Anda mendapatkan konteks baca dan rekaman pertama, Anda dapat memperoleh rekaman berikutnya di aliran dengan memanggil ClfsReadNextLogRecord berulang kali. Ketika tidak ada lagi rekaman data di aliran, ClfsReadNextLogRecord mengembalikan STATUS_END_OF_FILE. Tabel berikut ini memperlihatkan cara mengatur dan menginterpretasikan parameter.

Nama parameter Nilai

pvReadContext

Berikan pointer ke konteks baca yang Anda terima dari ClfsReadLogRecord.

ppvBuffer

Terima data rekaman Anda.

pcbBuffer

Terima ukuran data rekaman Anda.

peRecordType

Berikan nilai ClfsDataRecord.

plsnUndoNext

Terima bidang LSN urungkan berikutnya dari rekaman data. Anda tidak memerlukan nilai ini untuk terus membaca rantai, sehingga Anda dapat mengabaikannya.

plsnPrevious

Terima bidang LSN sebelumnya dari rekaman data. Anda tidak memerlukan nilai ini untuk terus membaca rantai, sehingga Anda dapat mengabaikannya.

plsnRecord

Terima LSN rekaman data yang dibaca.

Membaca rantai rekaman data yang ditautkan oleh LSN sebelumnya

Saat Anda menulis rekaman data ke aliran CLFS, Anda dapat mengatur LSN sebelumnya dari rekaman data ke LSN dari rekaman apa pun yang sebelumnya Anda tulis ke aliran. Dengan mengatur LSN sebelumnya, Anda dapat membuat rantai rekaman terkait yang nantinya dapat dilalui dalam urutan terbalik. Misalnya, Anda melakukan transaksi database dan Anda harus menulis beberapa catatan log CLFS untuk menjelaskan pembaruan yang dibuat oleh transaksi. Setiap kali Anda menulis catatan log yang menjelaskan pembaruan transaksi, Anda dapat mengatur LSN sebelumnya dari catatan ke LSN dari catatan log sebelumnya yang menjelaskan pembaruan yang dibuat oleh transaksi yang sama.

Misalkan Anda telah menulis rantai rekaman data yang ditautkan oleh LSN mereka sebelumnya. Untuk membaca rantai rekaman, Anda harus membuat konteks baca yang modenya diatur ke ClfsContextPrevious. Untuk membuat konteks baca dan membaca rekaman pertama dalam rantai, panggil ClfsReadLogRecord seperti yang diperlihatkan dalam tabel berikut.

Nama parameter Nilai

pvMarshalContext

Menyediakan pointer ke area marshalling.

plsnFirst

Berikan LSN dari rekor pertama dalam rantai. Ini harus menjadi LSN rekaman data, bukan rekaman hidupkan ulang.

peContextMode

Berikan nilai ClfsContextPrevious.

ppvReadBuffer

Terima data rekaman Anda.

pcbReadBuffer

Terima ukuran data rekaman Anda.

peRecordType

Terima jenis catatan. Nilai ini adalah sekumpulan bendera yang menunjukkan berbagai fitur rekaman. Rekaman adalah rekaman data, sehingga nilai yang Anda terima harus memiliki set bendera ClfsDataRecord dan bendera ClfsRestartRecord dihapus.

plsnUndoNext

Terima LSN berikutnya dari rekaman data. Anda tidak memerlukan nilai ini untuk terus membaca rantai, sehingga Anda dapat mengabaikannya.

plsnPrevious

Menerima LSN sebelumnya dari rekaman data. Anda tidak memerlukan nilai ini untuk terus membaca rantai, sehingga Anda dapat mengabaikannya.

ppvReadContext

Menerima penunjuk ke konteks baca buram. Gunakan konteks baca untuk membaca rekaman sebelumnya dalam rantai.

Setelah Anda memiliki konteks baca dan rekaman pertama, Anda dapat membaca rekaman yang tersisa dalam rantai dengan memanggil ClfsReadNextLogRecord berulang kali. Tabel berikut ini memperlihatkan cara mengatur dan menginterpretasikan parameter.

Nama parameter Nilai

pvReadContext

Berikan pointer ke konteks baca yang Anda terima dari ClfsReadLogRecord.

ppvBuffer

Terima data rekaman Anda.

pcbBuffer

Terima ukuran data rekaman Anda.

peRecordType

Berikan nilai ClfsDataRecord.

plsnUndoNext

Terima LSN berikutnya dari rekaman data. Anda tidak memerlukan nilai ini untuk terus membaca rantai, sehingga Anda dapat mengabaikannya.

plsnPrevious

Menerima LSN sebelumnya dari rekaman data. Anda tidak memerlukan nilai ini untuk terus membaca rantai, sehingga Anda dapat mengabaikannya.

plsnRecord

Terima LSN rekaman data yang dibaca.

Saat Anda melakukan panggilan berulang ke ClfsReadNextLogRecord, urutan panggilan Anda akan berakhir dengan salah satu cara berikut.

  • Akhirnya Anda akan membaca rekaman data yang memiliki LSN sebelumnya diatur ke CLFS_LSN_INVALID. Lain kali Anda memanggil ClfsReadNextLogRecord, itu akan mengembalikan STATUS_END_OF_FILE.

  • Akhirnya Anda akan membaca rekaman data yang memiliki LSN sebelumnya yang kurang dari LSN dasar aliran dan ekor arsip aliran. Lain kali Anda memanggil ClfsReadNextLogRecord, itu akan mengembalikan STATUS_LOG_START_OF_LOG.

Membaca rantai rekaman data yang ditautkan oleh LSN berikutnya

Saat Anda menulis rekaman data ke aliran CLFS, Anda dapat mengatur LSN berikutnya dari rekaman data ke LSN dari rekaman apa pun yang sebelumnya Anda tulis ke aliran. Dengan mengatur LSN undo-next, Anda dapat membuat rantai rekaman terkait yang dapat dilalui dalam urutan terbalik. Untuk informasi selengkapnya tentang membuat dan menginterpretasikan rantai undo-next, lihat ClFS Log Sequence Numbers.

Misalkan Anda telah menulis rantai rekaman data yang ditautkan oleh LSN mereka yang membatalkan berikutnya. Untuk membaca rantai rekaman, Anda harus memanggil ClfsReadLogRecord untuk membuat konteks baca yang modenya diatur ke ClfsContextUndoNext. Setelah itu, prosesnya identik dengan membaca rantai yang ditautkan oleh LSN sebelumnya (dijelaskan sebelumnya dalam topik ini).

Membaca rantai rekaman data yang ditautkan oleh LSN pengguna

Selain rantai yang ditautkan oleh LSN sebelumnya dan Urungkan LSN berikutnya, Anda dapat membuat rantai yang ditautkan oleh LSN Anda sendiri yang Anda sematkan dalam data rekaman Anda.

Misalkan Anda telah menulis rantai rekaman data yang ditautkan oleh LSN yang telah Anda simpan dalam data rekaman itu sendiri. Untuk membaca rantai rekaman, Anda harus membuat konteks baca yang modenya diatur ke ClfsContextPrevious atau ClfsContextUndoNext. Buat konteks baca Anda dan dapatkan rekaman tertulis terbaru dalam rantai dengan memanggil ClfsReadLogRecord. Kemudian panggil ClfsReadNextLogRecord berulang kali untuk mendapatkan rekaman sebelumnya dalam rantai. Setiap kali Anda memanggil ClfsReadNextLogRecord, atur parameter plsnUser ke LSN rekaman sebelumnya dalam rantai Anda. LSN yang Anda berikan di plsnUser menggantikan nilai apa pun yang disimpan dalam bidang LSN sebelumnya atau batalkan LSN rekaman saat ini.

Perhatikan bahwa Anda hanya dapat bergerak mundur di aliran saat memanggil ClfsReadNextLogRecord untuk membaca rantai rekaman. LSN yang Anda berikan di plsnUser harus kurang dari LSN rekaman saat ini dalam rantai.