Partilhar via


Promoção de transações

Aplica-se a:SQL Server

O de promoção de de transações descreve uma transação local leve que pode ser promovida automaticamente para uma transação totalmente distribuível, conforme necessário. Quando um procedimento armazenado gerenciado é invocado dentro de uma transação de banco de dados no servidor, o código CLR (Common Language Runtime) é executado no contexto de uma transação local. Se você abrir uma conexão com um servidor remoto dentro de uma transação de banco de dados, a conexão com o servidor remoto será incluída na transação distribuída e a transação local será automaticamente promovida para uma transação distribuída.

Assim, a promoção de transações minimiza a sobrecarga de transações distribuídas, adiando a criação de uma transação distribuída até que seja necessária. A promoção de transações é automática se tiver sido ativada usando a palavra-chave Enlist e não requer a intervenção do desenvolvedor. O Provedor de Dados do .NET Framework para SQL Server fornece suporte para promoção de transações, manipuladas por meio das classes no namespace do .NET Framework System.Data.SqlClient.

A palavra-chave Enlist

A propriedade ConnectionString de um objeto SqlConnection suporta a palavra-chave Enlist, que indica se System.Data.SqlClient deteta contextos transacionais e inscreve automaticamente a conexão em uma transação distribuída. Se essa palavra-chave estiver definida como true (o padrão), a conexão será automaticamente incluída no contexto de transação atual do thread de abertura. Se essa palavra-chave estiver definida como false, a conexão SqlClient não interage com uma transação distribuída. Se Enlist não for especificado na cadeia de conexão, a conexão será automaticamente alistada em uma transação distribuída se uma for detetada no momento em que a conexão for aberta.

Transações distribuídas

As transações distribuídas normalmente consomem recursos significativos do sistema. O Microsoft Distributed Transaction Coordinator (MS DTC) gerencia essas transações e integra todos os gerenciadores de recursos acessados nessas transações. A promoção de transações, por outro lado, é uma forma especial de uma transação System.Transactions que efetivamente delega o trabalho a uma transação simples do SQL Server. System.Transactions, System.Data.SqlCliente SQL Server coordenam o trabalho envolvido no tratamento da transação, promovendo-a para uma transação distribuída completa, conforme necessário.

O benefício de usar a promoção de transação é que, quando uma conexão é aberta com uma transação de TransactionScope ativa e nenhuma outra conexão é aberta, a transação é confirmada como uma transação leve, em vez de incorrer na sobrecarga extra de uma transação distribuída completa. Para obter mais informações sobre TransactionScope, consulte Usar System.Transactions.