Menggunakan Aliran Log dengan Kernel Transaction Manager (KTM)

Sistem pemrosesan transaksi berbasis KTM (TPSs) harus mencatat aktivitas transaksi dengan menggunakan Sistem File Log Umum (CLFS). KTM membuat aliran log untuk setiap objek manajer transaksi. Setiap manajer sumber daya harus membuat aliran lognya sendiri.

Membuat Aliran Log untuk Objek Manajer Transaksi

When your resource manager calls ZwCreateTransactionManager, you must specify the name of a CLFS log stream. Jika aliran yang ditentukan tidak ada, KTM akan membuatnya. If the stream already exists, ZwCreateTransactionManager reopens it. KTM menetapkan aliran log ini ke objek manajer transaksi.

KTM menggunakan aliran log objek manajer transaksi untuk merekam informasi status internal tentang objek manajer transaksi dan objek berikut yang terkait dengannya:

  • Semua objek resource manager terkait
  • Semua objek transaksi terkait
  • Semua objek pendaftaran terkait

Jika operasi transaksional terganggu sebelum selesai, KTM dapat menggunakan informasi dalam log untuk menentukan apakah akan menerapkan atau mengembalikan transaksi.

KTM tidak merekam data transaksi yang diterima manajer sumber daya atau dikirim ke klien. Resource manager harus menggunakan aliran log mereka sendiri untuk merekam informasi ini.

Resource managers can call ZwQueryInformationTransactionManager to get information about a transaction manager object's log stream, such as the log stream's path name or the GUID that KTM assigns to the stream.

Membuat Aliran Log untuk Resource Manager

In its initialization code, each resource manager should call ClfsCreateLogFile to create its own log stream. Setiap manajer sumber daya harus menggunakan alirannya untuk merekam semua informasi tentang transaksi yang diperlukan untuk menerapkan, menggulung balik, atau memulihkan data transaksi.

KTM dan semua manajer sumber daya TPS dapat menggunakan satu file log, tetapi setiap komponen TPS harus menggunakan aliran yang berbeda dalam file log. For information about how to specify individual streams within a log file, see ClfsCreateLogFile.

Periodically, KTM creates a restart area in the transaction manager's log stream. Ketika KTM melakukan operasi pemulihan, KTM membaca area hidupkan ulang terakhir untuk memulihkan status objek yang terbuka sebelum pematian sistem. Demikian pula, resource manager Anda harus secara berkala membuat area pemulihan di alur lognya. Misalnya, manajer sumber daya Anda dapat membuat sebuah area pemulihan setiap kali operasi transaksi selesai.

Untuk informasi selengkapnya tentang menghidupkan ulang area di aliran log CLFS, lihat Membaca Mulai Ulang Rekaman dari Aliran CLFS. Also, see the ClfsWriteRestartArea, ClfsReadRestartArea, and ClfsReadPreviousRestartArea routines.

Menggunakan Aliran Log untuk Pemulihan

After your resource manager calls ZwCreateTransactionManager, it must call ZwRecoverTransactionManager. The ZwRecoverTransactionManager routine reads the transaction manager object's log stream to recover the state of the TPS to a known good point. Jika komputer dimatikan dengan benar (atau tidak dimatikan), aliran log berisi informasi minimal setelah resource manager terakhir dimuat. Jika terjadi crash sistem, aliran log berisi informasi pemulihan yang cukup untuk memulihkan semua transaksi ke status yang diketahui.

After your resource manager calls ZwCreateResourceManager, it must call ZwRecoverResourceManager. The ZwRecoverResourceManager routine tries to recover the transactions that are associated with each of the resource manager's enlistments. Untuk informasi selengkapnya tentang cara memulihkan transaksi manajer sumber daya, lihat Menangani Operasi Pemulihan.

Menyimpan Data Transaksi

Resource manager yang menggunakan aliran log CLFS harus menyimpan data transaksi di area marshaling CLFS. CLFS secara berkala memindahkan data dari area marshaling aliran log ke media penyimpanan permanen. Untuk mencatat operasi yang memodifikasi data, manajer sumber daya mungkin mengambil langkah-langkah berikut:

  1. Salin data asli, sebelum operasi tulis memodifikasinya, ke area marshaling.

  2. Lakukan operasi pada salinan data tanpa memodifikasi media penyimpanan permanen database.

  3. Salin data baru ke area marshaling.

Jika resource manager menerima pemberitahuan pengembalian, itu dapat memulihkan data asli dari aliran log. Jika menerima pemberitahuan penerapan, resource manager dapat menyalin data yang dimodifikasi dari aliran log ke media penyimpanan permanen database.

Resource managers can also use the ZwSetInformationEnlistment routine to store recovery information in an enlistment object. KTM menyimpan informasi ini dalam aliran lognya dan membacanya dari aliran log selama operasi pemulihan. Therefore, a resource manager can obtain this recovery information at any time by calling ZwQueryInformationEnlistment.