Compartilhar via


Promoção de transações

Aplica-se a: SQL Server

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 do .NET Framework para SQL Server fornece suporte para promoção de transação, manipulado por meio das 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 MS DTC (Coordenador de Transações Distribuídas da Microsoft) gerencia essas transações e integra todos os gerenciadores de recursos acessados nessas transações. A promoção de transação, por outro lado, é uma forma especial de uma transação System.Transactions que delega efetivamente o trabalho a uma transação simples do SQL Server. System.Transactions, System.Data.SqlClient e SQL Server coordenam o trabalho envolvido na manipulação da transação, promovendo-a para uma transação totalmente distribuída, 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 TransactionScope, consulte Usando System.Transactions.

Confira também

Integração CLR e transações