Transactiepromotie
van toepassing op:SQL Server-
Transactie promotie beschrijft een lichtgewicht, lokale transactie die indien nodig automatisch kan worden gepromoveerd naar een volledig distribueerbare transactie. Wanneer een beheerde opgeslagen procedure wordt aangeroepen binnen een databasetransactie op de server, wordt de CLR-code (Common Language Runtime) uitgevoerd in de context van een lokale transactie. Als u een verbinding opent met een externe server binnen een databasetransactie, wordt de verbinding met de externe server opgenomen in de gedistribueerde transactie en wordt de lokale transactie automatisch gepromoveerd naar een gedistribueerde transactie.
Transactiepromotie minimaliseert dus de overhead van gedistribueerde transacties door het maken van een gedistribueerde transactie uit te stellen totdat deze nodig is. Transactiepromotie wordt automatisch uitgevoerd als deze is ingeschakeld met behulp van het trefwoord Enlist
en geen tussenkomst van de ontwikkelaar vereist. De .NET Framework-gegevensprovider voor SQL Server biedt ondersteuning voor transactiepromotie, verwerkt via de klassen in de .NET Framework-System.Data.SqlClient
naamruimte.
Het trefwoord Enlist
De eigenschap ConnectionString
van een SqlConnection
-object ondersteunt het trefwoord Enlist
, waarmee wordt aangegeven of System.Data.SqlClient
transactionele contexten detecteert en de verbinding automatisch in een gedistribueerde transactie inschrijft. Als dit trefwoord is ingesteld op true (de standaardinstelling), wordt de verbinding automatisch opgenomen in de huidige transactiecontext van de openingsthread. Als dit trefwoord is ingesteld op onwaar, communiceert de SqlClient
verbinding niet met een gedistribueerde transactie. Als Enlist
niet is opgegeven in de verbindingsreeks, wordt de verbinding automatisch in een gedistribueerde transactie opgenomen als er een wordt gedetecteerd op het moment dat de verbinding wordt geopend.
Gedistribueerde transacties
Gedistribueerde transacties verbruiken doorgaans aanzienlijke systeembronnen. Microsoft Distributed Transaction Coordinator (MS DTC) beheert dergelijke transacties en integreert alle resourcemanagers die in deze transacties worden geopend. Transactiepromotie is daarentegen een speciale vorm van een System.Transactions
transactie die het werk effectief delegeert aan een eenvoudige SQL Server-transactie.
System.Transactions
, System.Data.SqlClient
en SQL Server coördineren het werk dat betrokken is bij het verwerken van de transactie, en promoveren deze naar een volledige gedistribueerde transactie, indien nodig.
Het voordeel van het gebruik van transactiepromotie is dat wanneer een verbinding wordt geopend met een actieve TransactionScope
transactie en er geen andere verbindingen worden geopend, de transactie doorvoert als een lichtgewicht transactie in plaats van de extra overhead van een volledige gedistribueerde transactie. Zie System.Transactions gebruikenvoor meer informatie over TransactionScope
.