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 all'interno di una transazione del database viene aperta una connessione a un server remoto, la connessione al server remoto viene inserita nella transazione distribuita e la transazione locale viene promossa automaticamente a una transazione distribuita. La promozione delle transazioni riduce pertanto l'overhead delle transazioni distribuite posticipando la creazione di una transazione distribuita finché non si rende necessaria. La promozione delle transazioni è automatica, se è stata abilitata usando la parola chiave Enlist e non richiede l'intervento dello sviluppatore. .NET Framework provider di dati per SQL Server fornisce supporto per l'innalzamento di livello delle transazioni, gestito tramite le classi nello spazio dei nomi System.Data.SqlClient di .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 invece la parola chiave viene 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 in modo efficace il lavoro a una semplice transazione di SQL Server. System.Transactions, System.Data.SqlClient e SQL Server coordinano il lavoro necessario per gestire la transazione, promuovendola 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 TransactionScope attiva 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 Uso di System.Transactions.

Vedi anche

Integrazione con CLR e transazioni