Gestion des opérations de restauration

Un gestionnaire de ressources, un client transactionnel ou KTM peut restaurer une transaction s’il détermine que la transaction ne doit pas être validée (généralement parce qu’une erreur a été détectée).

Pour restaurer une transaction, un gestionnaire de ressources peut appeler ZwRollbackEnlistment. Une fois que le gestionnaire de ressources a appelé ZwCreateEnlistment pour s’inscrire dans une transaction, il peut restaurer la transaction à tout moment avant d’appeler ZwPrepareComplete.

Les clients transactionnels peuvent restaurer leurs transactions en appelant ZwRollbackTransaction. Une fois qu’un client transactionnel a appelé ZwCreateTransaction pour créer une transaction, il peut restaurer la transaction à tout moment avant d’appeler ZwCommitTransaction.

En outre, un client transactionnel peut définir une valeur de délai d’attente pour une transaction en appelant ZwSetInformationTransaction. KTM annule la transaction si elle n’a pas été validée dans le délai spécifié.

Lorsqu’un appel à ZwRollbackEnlistment ou ZwRollbackTransaction est effectué, ou lorsqu’une valeur de délai d’attente est dépassée, KTM envoie une notification TRANSACTION_NOTIFY_ROLLBACK à tous les gestionnaires de ressources.

Lorsque chaque gestionnaire de ressources reçoit une notification TRANSACTION_NOTIFY_ROLLBACK, il doit effectuer les opérations suivantes :

  1. Restaurez les données de la transaction à l’état dans lequel elles se trouvait avant que le gestionnaire de ressources ne soit inscrit dans la transaction.

    En règle générale, un gestionnaire de ressources restaure les données de la transaction en copiant les données initiales enregistrées de la transaction à partir du flux de journaux vers le stockage permanent public de la base de données. Pour plus d’informations sur l’utilisation des flux de journaux, consultez Utilisation de flux de journaux avec KTM.

  2. Appelez ZwRollbackComplete.

Après avoir appelé ZwRollbackComplete, le gestionnaire de ressources doit appeler ZwClose pour fermer le handle d’inscription.

Si un gestionnaire de ressources a lancé l’opération de restauration, il doit utiliser son interface cliente pour informer le client que la transaction a échoué.