Promoção de transações

A promoção de transações descreve uma transação local superficial que pode ser elevada automaticamente a uma transação totalmente distribuída, conforme necessário. Quando um procedimento armazenado gerenciado é invocado em 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 houver uma conexão com um servidor remoto aberta em uma transação de banco de dados, a conexão com o servidor remoto será inscrita na transação distribuída e a transação local será elevada automaticamente a uma transação distribuída. Assim, a promoção da transação minimiza a sobrecarga das transações distribuídas, adiando a criação de uma transação distribuída até que seja necessário. A promoção da transação será automática, se tiver sido habilitada usando a palavra-chave Enlist e não exigir a intervenção do desenvolvedor. O Provedor de Dados .NET Framework para o SQL Server dá suporte à promoção de transações, tratada pelas classes no namespace System.Data.SqlClient do .NET Framework.

A palavra-chave Enlist

A propriedade ConnectionString de um objeto SqlConnection dá suporte à palavra-chave Enlist, que indica se System.Data.SqlClient detecta contextos transacionais e inscreve automaticamente a conexão em uma transação distribuída. Se essa palavra-chave for definida como true (padrão), a conexão será inscrita automaticamente no contexto da transação atual do thread de abertura. Se essa palavra-chave for definida como false, a conexão SqlClient não irá interagir com uma transação distribuída. Se Enlist não estiver especificada na cadeia de conexão, a conexão será inscrita automaticamente em uma transação distribuída, caso uma seja detectada no momento em que a conexão é aberta.

Transações distribuídas

Normalmente, as transações distribuídas consomem recursos do sistema significativos. O Coordenador de Transações Distribuídas da Microsoft (MS DTC) gerencia essas transações e integra todos os gerenciadores de recursos acessados nessas transações. Por outro lado, a promoção de transações é uma forma especial de uma transação System.Transactions que delega efetivamente o trabalho para uma simples transação do SQL Server. System.Transactions, System.Data.SqlClient e o SQL Server coordenam o trabalho envolvido no tratamento da transação, elevando-a a uma transação distribuída completa, conforme necessário.

A vantagem de usar a promoção de transações é que, quando uma conexão é aberta com uma transação TransactionScope ativa e não há qualquer outra conexão aberta, a transação é confirmada como uma transação superficial, em vez de incorrer na sobrecarga adicional de uma transação distribuída completa. Para obter mais informações sobre o TransactionScope, consulte Usando System.Transactions.

Consulte também

Conceitos

Integração CLR e transações