Uso dei flussi di log con KTM
I sistemi di elaborazione delle transazioni basati su KTM (TPS) devono registrare l'attività delle transazioni tramite Common Log File System (CLFS). KTM crea un flusso di log per ogni oggetto di gestione transazioni. Ogni gestore di risorse deve creare un proprio flusso di log.
Creazione di flussi di log per oggetti di Gestione transazioni
Quando il gestore risorse chiama ZwCreateTransactionManager, è necessario specificare il nome di un flusso di log CLFS. Se il flusso specificato non esiste, KTM lo crea. Se il flusso esiste già, ZwCreateTransactionManager lo riapre. KTM assegna questo flusso di log all'oggetto gestione transazioni.
KTM usa il flusso di log dell'oggetto gestione transazioni per registrare informazioni sullo stato interno sull'oggetto gestione transazioni e su tutti gli oggetti di gestione risorse, gli oggetti transazione e gli oggetti di integrazione associati all'oggetto gestione transazioni. Se le operazioni transazionali vengono interrotte prima del completamento, KTM può usare le informazioni nel log per determinare se eseguire il commit o il rollback delle transazioni.
KTM non registra i dati delle transazioni ricevuti dai gestori di risorse o inviati ai client. I gestori di risorse devono usare i propri flussi di log per registrare queste informazioni.
I gestori di risorse possono chiamare ZwQueryInformationTransactionManager per ottenere informazioni sul flusso di log di un oggetto di gestione transazioni, ad esempio il nome del percorso del flusso di log o il GUID assegnato da KTM al flusso.
Creazione di flussi di log per i gestori di risorse
Nel codice di inizializzazione, ogni gestore di risorse deve chiamare ClfsCreateLogFile per creare il proprio flusso di log. Ogni gestore di risorse deve usare il flusso per registrare tutte le informazioni sulle transazioni necessarie per eseguire il commit, il rollback o il ripristino dei dati della transazione.
KTM e tutti i gestori di risorse di un tps possono usare un singolo file di log, ma ogni componente TPS deve usare un flusso diverso all'interno del file di log. Per informazioni su come specificare singoli flussi all'interno di un file di log, vedere ClfsCreateLogFile.
KTM crea periodicamente un'area di riavvio nel flusso di log del gestore transazioni. Quando KTM esegue un'operazione di ripristino, legge l'ultima area di riavvio per ripristinare lo stato degli oggetti aperti prima dell'arresto del sistema. Analogamente, resource manager deve creare periodicamente aree di riavvio nel flusso di log. Ad esempio, resource manager potrebbe creare un'area di riavvio ogni volta che viene completata un'operazione transazionale.
Per altre informazioni sulle aree di riavvio nei flussi di log CLFS, vedere Lettura dei record di riavvio da un flusso CLFS. Vedere anche le routine ClfsWriteRestartArea, ClfsReadRestartArea e ClfsReadPreviousRestartArea .
Uso dei flussi di log per il ripristino
Dopo che il gestore delle risorse chiama ZwCreateTransactionManager, deve chiamare ZwRecoverTransactionManager. La routine ZwRecoverTransactionManager legge il flusso di log dell'oggetto di gestione transazioni per ripristinare lo stato del tps a un punto valido noto. Se il computer viene arrestato correttamente, o non è stato arrestato, dopo l'ultimo caricamento del gestore risorse, il flusso di log contiene informazioni minime. Se si è verificato un arresto anomalo del sistema, il flusso di log contiene informazioni di ripristino sufficienti per ripristinare tutte le transazioni in uno stato noto.
Dopo che il gestore risorse chiama ZwCreateResourceManager, deve chiamare ZwRecoverResourceManager. La routine ZwRecoverResourceManager tenta di recuperare le transazioni associate a ogni integrazione del gestore risorse. Per altre informazioni su come ripristinare le transazioni di un gestore risorse, vedere Gestione delle operazioni di ripristino.
Archiviazione dei dati delle transazioni
I gestori di risorse che usano flussi di log CLFS devono archiviare i dati delle transazioni in aree di marshalling CLFS. CLFS sposta periodicamente i dati dall'area di marshalling del flusso di log a un supporto di archiviazione permanente. Per registrare un'operazione che modifica i dati, un gestore di risorse può eseguire le operazioni seguenti:
Copiare i dati originali, prima che l'operazione di scrittura lo modifichi, nell'area di marshalling.
Eseguire l'operazione su una copia dei dati senza modificare il supporto di archiviazione permanente del database.
Copiare i nuovi dati nell'area di marshalling.
Se resource manager riceve una notifica di rollback, può ripristinare i dati originali dal flusso di log. Se riceve una notifica di commit, Gestione risorse può copiare i dati modificati dal flusso di log nel supporto di archiviazione permanente del database.
I gestori di risorse possono anche usare la routine ZwSetInformationEnlistment per archiviare le informazioni di ripristino in un oggetto di integrazione. KTM salva queste informazioni nel flusso di log e le legge dal flusso di log durante le operazioni di ripristino. Pertanto, un gestore di risorse può ottenere queste informazioni di ripristino in qualsiasi momento chiamando ZwQueryInformationEnlistment.