Utilisation de flux de journaux avec KTM
Les systèmes de traitement des transactions basés sur KTM (TPS) doivent consigner l’activité des transactions à l’aide du système CLFS (Common Log File System ). KTM crée un flux de journal pour chaque objet de gestionnaire de transactions. Chaque gestionnaire de ressources doit créer son propre flux de journal.
Création de flux de journaux pour des objets Transaction Manager
Lorsque votre gestionnaire de ressources appelle ZwCreateTransactionManager, vous devez spécifier le nom d’un flux de journal CLFS. Si le flux spécifié n’existe pas, KTM le crée. Si le flux existe déjà, ZwCreateTransactionManager le rouvre. KTM affecte ce flux de journal à l’objet gestionnaire de transactions.
KTM utilise le flux de journal de l’objet de gestionnaire de transactions pour enregistrer des informations d’état interne sur l’objet de gestionnaire de transactions et tous les objets Resource Manager, les objets de transaction et les objets d’inscription associés à l’objet gestionnaire de transactions. Si les opérations transactionnelles sont interrompues avant d’être terminées, KTM peut utiliser les informations contenues dans le journal pour déterminer s’il faut valider ou restaurer les transactions.
KTM n’enregistre pas les données de transaction que les gestionnaires de ressources reçoivent ou envoient aux clients. Les gestionnaires de ressources doivent utiliser leurs propres flux de journaux pour enregistrer ces informations.
Les gestionnaires de ressources peuvent appeler ZwQueryInformationTransactionManager pour obtenir des informations sur le flux de journal d’un objet de gestionnaire de transactions, comme le nom du chemin d’accès du flux de journaux ou le GUID que KTM affecte au flux.
Création de flux de journaux pour les gestionnaires de ressources
Dans son code d’initialisation, chaque gestionnaire de ressources doit appeler ClfsCreateLogFile pour créer son propre flux de journal. Chaque gestionnaire de ressources doit utiliser son flux pour enregistrer toutes les informations sur les transactions dont il a besoin pour valider, restaurer ou récupérer les données de la transaction.
KTM et tous les gestionnaires de ressources d’un TPS peuvent utiliser un seul fichier journal, mais chaque composant TPS doit utiliser un flux différent dans le fichier journal. Pour plus d’informations sur la façon de spécifier des flux individuels dans un fichier journal, consultez ClfsCreateLogFile.
Régulièrement, KTM crée une zone de redémarrage dans le flux de journal du gestionnaire de transactions. Lorsque KTM effectue une opération de récupération, il lit la dernière zone de redémarrage pour récupérer l’état des objets ouverts avant l’arrêt du système. De même, votre gestionnaire de ressources doit créer régulièrement des zones de redémarrage dans son flux de journal. Par exemple, votre gestionnaire de ressources peut créer une zone de redémarrage chaque fois qu’une opération transactionnelle est terminée.
Pour plus d’informations sur les zones de redémarrage dans les flux de journal CLFS, consultez Lecture des enregistrements de redémarrage à partir d’un flux CLFS. Consultez également les routines ClfsWriteRestartArea, ClfsReadRestartArea et ClfsReadPreviousRestartArea .
Utilisation de flux de journaux pour la récupération
Une fois que votre gestionnaire de ressources a appelé ZwCreateTransactionManager, il doit appeler ZwRecoverTransactionManager. La routine ZwRecoverTransactionManager lit le flux de journal de l’objet de gestionnaire de transactions pour récupérer l’état du TPS à un point correct connu. Si l’ordinateur s’est correctement arrêté ou s’il n’a pas été arrêté après le dernier chargement du gestionnaire de ressources, le flux de journaux contient un minimum d’informations. Si un incident système s’est produit, le flux de journaux contient suffisamment d’informations de récupération pour restaurer toutes les transactions à un état connu.
Une fois que votre gestionnaire de ressources a appelé ZwCreateResourceManager, il doit appeler ZwRecoverResourceManager. La routine ZwRecoverResourceManager tente de récupérer les transactions associées à chacune des inscriptions du gestionnaire de ressources. Pour plus d’informations sur la récupération des transactions d’un gestionnaire de ressources, consultez Gestion des opérations de récupération.
Stockage des données de transaction
Les gestionnaires de ressources qui utilisent des flux de journal CLFS doivent stocker les données de transaction dans les zones de marshaling CLFS. CLFS déplace régulièrement les données de la zone de marshaling du flux de journal vers un support de stockage permanent. Pour enregistrer une opération qui modifie des données, un gestionnaire de ressources peut effectuer les opérations suivantes :
Copiez les données d’origine, avant que l’opération d’écriture ne les modifie, dans la zone de marshaling.
Effectuez l’opération sur une copie des données sans modifier le support de stockage permanent de la base de données.
Copiez les nouvelles données dans la zone de marshaling.
Si le gestionnaire de ressources reçoit une notification de restauration, il peut restaurer les données d’origine à partir du flux de journal. S’il reçoit une notification de validation, le gestionnaire de ressources peut copier les données modifiées à partir du flux de journaux vers le support de stockage permanent de la base de données.
Les gestionnaires de ressources peuvent également utiliser la routine ZwSetInformationEnlistment pour stocker les informations de récupération dans un objet d’inscription. KTM enregistre ces informations dans son flux de journal et les lit à partir du flux de journal pendant les opérations de récupération. Par conséquent, un gestionnaire de ressources peut obtenir ces informations de récupération à tout moment en appelant ZwQueryInformationEnlistment.