Partilhar via


Gerenciamento de operações de reversão

Um gestor de recursos, um cliente transacional ou a KTM podem reverter uma transação se determinarem que a transação não deve ser confirmada (normalmente porque foi detetado um erro).

Para reverter uma transação, um gerente de recursos pode chamar ZwRollbackEnlistment. Depois que o gerenciador de recursos tiver chamado ZwCreateEnlistment para se alistar em uma transação, ele poderá reverter a transação a qualquer momento antes de chamar ZwPrepareComplete.

Os clientes transacionais podem reverter suas transações chamando ZwRollbackTransaction. Depois que um cliente transacional chama ZwCreateTransaction para criar uma transação, ele pode reverter a transação a qualquer momento antes de chamar ZwCommitTransaction.

Além disso, um cliente transacional pode definir um valor de tempo limite para uma transação chamando ZwSetInformationTransaction. A KTM reverte a transação se ela não tiver sido confirmada no período de tempo especificado.

Quando é feita uma chamada para ZwRollbackEnlistment ou ZwRollbackTransaction ou quando um valor de tempo limite é excedido, a KTM envia uma notificação de TRANSACTION_NOTIFY_ROLLBACK a todos os gestores de recursos.

Quando cada gerente de recursos recebe uma notificação de TRANSACTION_NOTIFY_ROLLBACK, ele deve fazer o seguinte:

  1. Restaure os dados da transação para o estado em que se encontravam antes de o gestor de recursos se ter inscrito na transação.

    Normalmente, um gerenciador de recursos restaura os dados da transação copiando os dados iniciais salvos da transação do fluxo de log para o armazenamento público e permanente do banco de dados. Para obter mais informações sobre como usar fluxos de log, consulte Usando fluxos de log com o KTM.

  2. Chame ZwRollbackComplete.

Depois de chamar ZwRollbackComplete, o gerenciador de recursos deve chamar ZwClose para fechar o identificador de alistamento.

Se um gerente de recursos iniciou a operação de reversão, ele deve usar sua interface de cliente para informar o cliente de que a transação falhou.