Udostępnij przez


Używanie strumieni logów z KTM

Systemy przetwarzania transakcji oparte na technologii KTM (TPS) powinny rejestrować aktywność transakcji przy użyciu wspólnego systemu plików dziennika (CLFS). KTM tworzy strumień dziennika dla każdego obiektu menedżera transakcji. Każdy menedżer zasobów powinien utworzyć własny strumień dziennika.

Tworzenie strumieni dzienników dla obiektów Menedżera transakcji

Gdy menedżer zasobów wywołuje element ZwCreateTransactionManager, należy określić nazwę strumienia dziennika CLFS. Jeśli określony strumień nie istnieje, KTM go utworzy. Jeśli strumień już istnieje, program ZwCreateTransactionManager ponownie go otworzy. KTM przypisuje ten strumień dziennika do obiektu menedżera transakcji.

KTM używa strumienia dziennika obiektu menedżera transakcji do rejestrowania informacji o stanie wewnętrznym obiektu menedżera transakcji i wszystkich obiektów menedżera zasobów, obiektów transakcji i obiektów rejestracji, które są skojarzone z obiektem menedżera transakcji. Jeśli operacje transakcyjne zostaną przerwane przed ich ukończeniem, KTM może użyć informacji w dzienniku, aby określić, czy zatwierdzić lub wycofać transakcje.

KTM nie rejestruje danych transakcji, które menedżerowie zasobów odbierają z klientów lub wysyłają do klientów. Menedżerowie zasobów muszą używać własnych strumieni dzienników do rejestrowania tych informacji.

Menedżerowie zasobów mogą wywoływać ZwQueryInformationTransactionManager, aby uzyskać informacje o strumieniu dziennika obiektu menedżera transakcji, takie jak nazwa ścieżki strumienia dziennika lub GUID, który KTM przypisuje do strumienia.

Tworzenie strumieni logów dla menedżerów zasobów

W kodzie inicjowania każdy menedżer zasobów powinien wywołać klasę ClfsCreateLogFile , aby utworzyć własny strumień dziennika. Każdy menedżer zasobów powinien używać swojego strumienia do rejestrowania wszystkich informacji o transakcjach, które są mu potrzebne do zatwierdzenia, wycofania lub odzyskania danych transakcji.

KTM, i wszystkie menedżery zasobów TPS mogą używać jednego pliku dziennika, ale każdy składnik TPS musi używać innego strumienia w pliku dziennika. Aby uzyskać informacje o sposobie określania poszczególnych strumieni w pliku dziennika, zobacz ClfsCreateLogFile.

Okresowo KTM tworzy strefę restartu w strumieniu logów menedżera transakcji. Gdy KTM wykonuje operację odzyskiwania, odczytuje ostatni obszar ponownego uruchamiania, aby odzyskać stan obiektów, które zostały otwarte przed zamknięciem systemu. Podobnie menedżer zasobów powinien okresowo tworzyć obszary ponownego uruchamiania w strumieniu dziennika. Na przykład menedżer zasobów może utworzyć obszar ponownego uruchamiania za każdym razem, gdy operacja transakcyjna zostanie ukończona.

Aby uzyskać więcej informacji na temat obszarów ponownego uruchamiania w strumieniach dzienników CLFS, zobacz Odczytywanie rekordów ponownego uruchamiania ze strumienia CLFS. Zobacz również procedury ClfsWriteRestartArea, ClfsReadRestartArea i ClfsReadPreviousRestartArea .

Używanie strumieni logów na potrzeby odzyskiwania

Po wywołaniu przez menedżera zasobów funkcji ZwCreateTransactionManager, należy wywołać funkcję ZwRecoverTransactionManager. Procedura ZwRecoverTransactionManager odczytuje strumień dziennika obiektu menedżera transakcji, aby odzyskać stan TPS do znanego dobrego punktu. Jeśli komputer został poprawnie zamknięty lub nie został zamknięty, po ostatnim załadowaniu menedżera zasobów strumień dziennika zawiera minimalne informacje. Jeśli wystąpiła awaria systemu, strumień dziennika zawiera wystarczającą ilość informacji odzyskiwania, aby przywrócić wszystkie transakcje do znanego stanu.

Po wywołaniu menedżera zasobów ZwCreateResourceManager należy wywołać metodę ZwRecoverResourceManager. Rutyna ZwRecoverResourceManager próbuje odzyskać transakcje powiązane z każdym z przydziałów menedżera zasobów. Aby uzyskać więcej informacji na temat odzyskiwania transakcji menedżera zasobów, zobacz Obsługa operacji odzyskiwania.

Przechowywanie danych transakcji

Menedżerowie zasobów korzystający ze strumieni dzienników CLFS powinni przechowywać dane transakcji w obszarach marshallingu CLFS. CLFS okresowo przenosi dane z obszaru przetwarzania strumienia dziennika do stałego nośnika pamięci. Aby zarejestrować operację modyfikującą dane, menedżer zasobów może wykonać następujące czynności:

  1. Skopiuj oryginalne dane do obszaru marshalingu przed operacją zapisu, która je modyfikuje.

  2. Wykonaj operację na kopii danych bez modyfikowania stałego nośnika magazynu bazy danych.

  3. Skopiuj nowe dane do obszaru marshallingu.

Jeśli menedżer zasobów otrzyma powiadomienie o wycofaniu, może przywrócić oryginalne dane ze strumienia dziennika. Jeśli otrzyma powiadomienie o zatwierdzeniu, menedżer zasobów może skopiować zmodyfikowane dane ze strumienia dziennika do stałego nośnika magazynu bazy danych.

Menedżerowie zasobów mogą również używać procedury ZwSetInformationEnlistment do przechowywania informacji odzyskiwania w obiekcie rejestracji. KTM zapisuje te informacje w swoim strumieniu logu i odczytuje je z niego podczas operacji odzyskiwania. W związku z tym menedżer zasobów może uzyskać te informacje odzyskiwania w dowolnym momencie, wywołując funkcję ZwQueryInformationEnlistment.