Condividi tramite


Promozione delle transazioni

Si applica a:SQL Server

La promozione delle transazioni descrive una transazione locale leggera che può essere promossa automaticamente a una transazione completamente distribuibile in base alle esigenze. Quando una stored procedure gestita viene richiamata all'interno di una transazione del database sul server, il codice CLR (Common Language Runtime) viene eseguito nel contesto di una transazione locale. Se si apre una connessione a un server remoto all'interno di una transazione di database, la connessione al server remoto viene inserita nella transazione distribuita e la transazione locale viene automaticamente promossa a una transazione distribuita.

Pertanto, la promozione delle transazioni riduce al minimo il sovraccarico delle transazioni distribuite rinviando la creazione di una transazione distribuita fino a quando non è necessaria. La promozione delle transazioni è automatica se è stata abilitata usando la parola chiave Enlist e non richiede l'intervento dello sviluppatore. Il provider di dati .NET Framework per SQL Server fornisce il supporto per l'innalzamento di livello delle transazioni, gestito tramite le classi nello spazio dei nomi System.Data.SqlClient .NET Framework.

Parola chiave Enlist

La proprietà ConnectionString di un oggetto SqlConnection supporta la parola chiave Enlist, che indica se System.Data.SqlClient rileva contesti transazionali e inserisce automaticamente la connessione in una transazione distribuita. Se questa parola chiave viene impostata su true (impostazione predefinita), la connessione viene inserita automaticamente nel contesto della transazione corrente del thread di apertura. Se questa parola chiave è impostata su false, la connessione SqlClient non interagisce con una transazione distribuita. Se Enlist non viene specificato nella stringa di connessione, la connessione viene automaticamente inserita in una transazione distribuita se ne viene rilevata una al momento dell'apertura della connessione.

Transazioni distribuite

Le transazioni distribuite utilizzano in genere un numero elevato di risorse di sistema. Microsoft Distributed Transaction Coordinator (MS DTC) gestisce tali transazioni e integra tutti i gestori di risorse a cui si accede in queste transazioni. L'innalzamento di livello delle transazioni, invece, è una forma speciale di una transazione System.Transactions che delega efficacemente il lavoro a una semplice transazione di SQL Server. System.Transactions, System.Data.SqlCliente SQL Server coordinano il lavoro coinvolto nella gestione della transazione, promuovendolo in una transazione distribuita completa in base alle esigenze.

Il vantaggio dell'utilizzo dell'innalzamento di livello delle transazioni è che quando una connessione viene aperta con una transazione attiva TransactionScope e non vengono aperte altre connessioni, il commit della transazione viene eseguito come transazione leggera, anziché incorrere in un sovraccarico aggiuntivo di una transazione distribuita completa. Per altre informazioni su TransactionScope, vedere Usare System.Transactions.