Повышение транзакции
Повышение транзакций относится к упрощенным локальным транзакциям, которые при необходимости могут быть автоматически повышены до свободно распределяемых транзакций. Когда управляемая хранимая процедура запускается в рамках транзакции базы данных на сервере, в контексте локальной транзакции запускается код CLR. Если соединение с удаленным сервером открывается в рамках транзакции базы данных, это соединение с удаленным сервером прикрепляется к распределенной транзакции, а локальная транзакция автоматически повышается до распределенной транзакции. Таким образом повышение транзакций минимизирует избыток распределенных транзакций, отсрочивая создание распределенной транзакции до тех пор, пока в ней не возникнет необходимость. Повышение транзакций выполняется автоматически, если оно задано с помощью ключевого слова Enlist, и не требует вмешательства разработчика. Поставщик данных .NET Framework для SQL Server обеспечивает поддержку повышения транзакций, выполняемого с помощью классов в пространстве имен .NET Framework System.Data.SqlClient.
Ключевое слово Enlist
Свойство ConnectionString объекта SqlConnection поддерживает использование ключевого слова Enlist, которое указывает, будет ли клиент System.Data.SqlClient обнаруживать контексты транзакций и автоматически прикреплять соединение к распределенной транзакции. Если для этого ключевого слова задано значение true (по умолчанию), соединение автоматически прикрепляется к текущему контексту транзакции открывающего потока. Если для ключевого слова задано значение false, то соединение SqlClient не будет взаимодействовать с распределенной транзакцией Если ключевое слово Enlist в строке соединения не задано, то соединение автоматически прикрепляется к распределенной транзакции, если она будет обнаружена при открытии соединения.
Распределенные транзакции
Распределенные транзакции обычно потребляют значительные системные ресурсы. Координатор распределенных транзакций Microsoft (MS DTC) управляет такими транзакциями и интегрирует все диспетчеры ресурсов, к которым выполняется доступ при этих транзакциях. С другой стороны, повышение транзакции – это особая форма транзакции System.Transactions, эффективно делегирующей работу простой транзакции SQL Server. Пространство имен System.Transactions, клиент System.Data.SqlClient и SQL Server координируют работу, выполняемую при обработке транзакции, при необходимости повышая ее до полностью распределенной транзакции.
Преимущество использования повышаемых транзакций заключается в том, что при открытии соединения с помощью активной транзакции TransactionScope и отсутствии других открытых соединений такая транзакция фиксируется как упрощенная, что позволяет избежать излишних затрат ресурсов на полностью распределенную транзакцию. Дополнительные сведения о функции TransactionScope см. в разделе Использование System.Transactions.