搭配 KTM 使用記錄資料流程

KTM 型交易處理系統 (TPSs) 應該使用 一般記錄檔案系統 (CLFS) 來記錄事務活動。 KTM 會為每個交易管理員物件建立記錄資料流程。 每個資源管理員都應該建立自己的記錄資料流程。

建立 Transaction Manager 物件的記錄資料流程

當您的資源管理員呼叫 ZwCreateTransactionManager時,您必須指定 CLFS 記錄資料流程的名稱。 如果指定的資料流程不存在,KTM 會建立它。 如果資料流程已經存在, ZwCreateTransactionManager 會重新開啟它。 KTM 會將此記錄資料流程指派給交易管理員物件。

KTM 會使用交易管理員物件的記錄資料流程來記錄交易管理員物件和與交易管理員物件相關聯的所有資源管理員物件、交易對象和登錄物件的內部狀態資訊。 如果交易作業在完成之前中斷,KTM 可以使用記錄中的資訊來判斷是否認可或回復交易。

KTM 不會記錄資源管理員接收或傳送給用戶端的交易資料。 資源管理員必須使用自己的記錄資料流程來記錄此資訊。

資源管理員可以呼叫 ZwQueryInformationTransactionManager 來取得交易管理員物件的記錄資料流程相關資訊,例如記錄資料流程的路徑名稱或 KTM 指派給資料流程的 GUID。

建立資源管理員的記錄資料流程

在其初始化程式碼中,每個資源管理員都應該呼叫 ClfsCreateLogFile 來建立自己的記錄資料流程。 每個資源管理員都應該使用其資料流程來記錄其認可、復原或復原交易資料所需的所有交易相關資訊。

KTM 和 TPS 的所有資源管理員都可以使用單一記錄檔,但每個 TPS 元件都必須在記錄檔內使用不同的資料流程。 如需如何在記錄檔中指定個別資料流程的資訊,請參閱 ClfsCreateLogFile

KTM 會定期在交易管理員的記錄資料流程中建立 重新開機區域 。 當 KTM 執行復原作業時,它會讀取最後一個重新開機區域,以復原系統關閉之前開啟的物件狀態。 同樣地,您的資源管理員應該在其記錄資料流程中定期建立重新開機區域。 例如,您的資源管理員可能會在每次交易作業完成時建立重新開機區域。

如需有關 CLFS 記錄資料流程中重新開機區域的詳細資訊,請參閱 從 CLFS 資料流程讀取重新開機記錄。 另請參閱ClfsWriteRestartArea、ClfsReadRestartAreaClfsReadPreviousRestartArea常式。

使用記錄資料流程進行復原

資源管理員呼叫 ZwCreateTransactionManager之後,它必須呼叫 ZwRecoverTransactionManagerZwRecoverTransactionManager常式會讀取交易管理員物件的記錄資料流程,以將 TPS 的狀態復原到已知的良好點。 如果電腦在上次載入資源管理員之後正確關閉或未關閉,則記錄資料流程會包含最少的資訊。 如果系統當機,記錄資料流程會包含足夠的復原資訊,可將所有交易還原到已知狀態。

在資源管理員呼叫 ZwCreateResourceManager之後,它必須呼叫 ZwRecoverResourceManagerZwRecoverResourceManager常式會嘗試復原與每個資源管理員登記相關聯的交易。 如需如何復原資源管理員交易的詳細資訊,請參閱 處理復原作業

儲存異動資料

使用 CLFS 記錄資料流程的資源管理員應該將交易資料儲存在 CLFS 封送處理區域中。 CLFS 會定期將資料從記錄資料流程的封送處理區域移至永久儲存媒體。 若要記錄修改資料的作業,資源管理員可能會執行下列動作:

  1. 在寫入作業修改原始資料之前,將原始資料複製到封送處理區域。

  2. 在資料複本上執行作業,而不需修改資料庫的永久儲存媒體。

  3. 將新資料複製到封送處理區域。

如果資源管理員收到復原通知,它可以從記錄資料流程還原原始資料。 如果收到認可通知,資源管理員可以將修改的資料從記錄資料流程複製到資料庫的永久儲存媒體。

資源管理員也可以使用 ZwSetInformationEnlistment 常式,將復原資訊儲存在登錄物件中。 KTM 會將此資訊儲存在其記錄資料流程中,並在復原作業期間從記錄資料流程讀取。 因此,資源管理員可以隨時呼叫 ZwQueryInformationEnlistment來取得此復原資訊。