Bagikan melalui


Antarmuka ILog (txlogpub.h)

Menyediakan fungsionalitas pengelogan tingkat rendah generik.

Common Log File System (CLFS), menyediakan fungsionalitas yang merupakan superset yang disediakan oleh ILog.

Warisan

Antarmuka ILog mewarisi dari antarmuka IUnknown . ILog juga memiliki jenis anggota ini:

Metode

Antarmuka ILog memiliki metode ini.

 
ILog::AppendRecord

Tulis rekaman baru di akhir log.
ILog::Force

Memaksa konten log ke disk, setidaknya hingga melalui LSN yang ditentukan.
ILog::GetLogLimits

Mengambil informasi tentang batas log saat ini.
ILog::ReadRecord

Membaca rekaman dari log.
ILog::ReadRecordPrefix

Membaca bagian awal rekaman dari log.
ILog::SetAccessPolicyHint

Memberikan petunjuk tentang implementasi tentang pola di mana rekaman akan dibaca.
ILog::TruncatePrefix

Membuang awalan log yang ditentukan, membuatnya tidak lagi dapat diambil.

Keterangan

WAL adalah teknik yang digunakan oleh aplikasi tertentu, seperti sistem manajemen database, untuk menerapkan transaksi atomik dan terisolasi. Teknik ini melibatkan penulisan catatan perubahan pada sumber daya aplikasi ke log sebelum Anda membuat perubahan ini. Dengan cara ini perubahan dapat dikembalikan jika diperlukan, misalnya jika transaksi gagal atau terganggu. Agar aplikasi dapat menyediakan transaksi yang kuat terhadap gangguan seperti crash sistem atau kegagalan daya, implementasi pengelogan harus menyediakan metode untuk memaksa log; yaitu, untuk memastikan bahwa rekaman yang ditulis sebelumnya ada di disk sebelum melanjutkan.

Menulis rekaman yang menggunakan ILog adalah operasi berurutan; artinya, rekaman baru selalu ditambahkan ke akhir log. Setiap rekaman yang ditambahkan ke log diberi nomor urutan log (LSN), pengidentifikasi numerik yang dapat digunakan untuk mengambil rekaman nanti. Jenis data LSN adalah typedef untuk LARGE_INTEGER, nilai 64-bit yang ditandatangani; namun, ILog hanya menggunakan LSN dengan nilai nonnegatif. Selain itu, LSN harus memenuhi kondisi berikut:

  • LSN meningkat secara monoton; jika rekaman B ditulis ke log setelah rekaman A, LSN rekaman B harus lebih besar dari LSN rekaman A.
  • Nilai nol dan MAXLSN (0x7FFFFFFFFFFFFFFF) tidak boleh digunakan sebagai LSN rekaman, karena memiliki arti khusus untuk beberapa metode ILog.
Selain kondisi di sini, tidak ada asumsi yang harus dibuat tentang bagaimana LSN ditetapkan oleh implementasi ILog. Secara khusus, tidak aman untuk mengasumsikan bahwa rekaman akan diberi nilai berurutan untuk LSN.

Setelah catatan ditambahkan ke log, rekaman mungkin tidak dimodifikasi. Namun, ketika rekaman yang ditulis sebelumnya tidak lagi diperlukan, misalnya catatan perubahan dalam transaksi yang telah dilakukan, ILog mendukung pemotongan log. Dengan cara ini, ruang disk yang digunakan untuk rekaman yang tidak penting dapat digunakan kembali. Memotong log terdiri dari menghapus semua rekaman dengan LSN kurang dari nilai yang ditentukan.

Sebagai pengoptimalan performa, beberapa implementasi ILog dapat menyangga rekaman dalam memori hingga log dipaksa. Jika demikian, khususnya Anda harus mempertimbangkan kontrol kesalahan dan pemulihan. Pertimbangkan situasi berikut:

  1. Catatan A ditambahkan ke log, tetapi log tidak dipaksa. Implementasi ILog menyalin rekaman ke buffer dalam memori dan mengembalikan kode keberhasilan.
  2. Catatan B ditambahkan ke log, dan implementasi ILog memutuskan untuk memaksa log ke disk. Ini karena penelepon meminta log dipaksa atau karena buffer memori penuh. Namun, operasi tulis gagal, misalnya karena ruang disk yang rendah.
Dalam situasi ini, tidak pantas bagi implementasi ILog untuk memungkinkan catatan tambahan ditambahkan ke log, kecuali dapat menjamin bahwa semua rekaman yang menampilkan kode keberhasilan pertama kali ditulis ke disk. Salah satu metode kontrol kesalahan yang mungkin adalah menyematkan log dalam status kesalahan ketika situasi ini terjadi, secara permanen melarang penulisan tambahan ke instans log. Penelepon yang tidak memaksa log ke disk untuk setiap catatan yang ditambahkan harus menyadari bahwa situasi ini dapat terjadi dan dapat menanganinya dengan tepat.

Implementasi Berbasis File ILog

Sistem operasi Windows menyediakan implementasi ILog berbasis file, yang memungkinkan Anda membuat log yang cocok untuk pengelogan write-ahead pada file. Log menggunakan file sebagai buffer melingkar, yang memungkinkan ruang yang tidak digunakan untuk digunakan kembali. Ini juga dapat meningkatkan ukuran file yang mungkin diperlukan agar pas dengan rekaman tambahan saat log penuh. Perubahan pada log dibuat secara atomik, sehingga konten log dapat dipulihkan setelah crash. Implementasi ini menggunakan buffer dalam memori untuk menambahkan rekaman log. Akibatnya, rekaman tidak dijamin ditulis ke disk ketika metode ILog::AppendRecord kembali, kecuali pemanggil meminta agar log dipaksa.

Gunakan CLSID berikut untuk membuat instans log berbasis file (lihat CoCreateInstance):

CLSID_SimpleFileBasedLog ({E16C0593-128F-11D1-97E4-00C04FB9618A} ).

Implementasi berbasis file ILog juga mendukung antarmuka IFileBasedLogInit dan IPersistFile . Gunakan IFileBasedLogInit::InitNew untuk membuat file log baru. Gunakan IPersistFile::Load untuk membuka file log yang ada.

Implementasi ini menggunakan kebijakan kontrol kesalahan sederhana. Jika salah satu metode gagal karena kesalahan pada tingkat sistem file, yang mencakup kesalahan penuh disk, log disematkan dalam status kesalahan. Ini mencegah klien menambahkan rekaman tambahan ke file atau membaca rekaman yang berpotensi buruk. Untuk terus menggunakan file log, Anda harus membuat instans baru log.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header txlogpub.h

Lihat juga

IFileBasedLogInit