Поделиться через


Повышение транзакции

Область применения: SQL Server

Повышение транзакций описывает упрощенную локальную транзакцию, которая может быть автоматически повышена до полностью распространяемой транзакции по мере необходимости. Когда управляемая хранимая процедура запускается в рамках транзакции базы данных на сервере, в контексте локальной транзакции запускается код CLR. Если соединение с удаленным сервером открывается в рамках транзакции базы данных, это соединение с удаленным сервером прикрепляется к распределенной транзакции, а локальная транзакция автоматически повышается до распределенной транзакции. Таким образом повышение транзакции минимизирует избыток распределенных транзакций, откладывая создание распределенной транзакции до тех пор, пока в ней не возникнет необходимость. Повышение транзакций является автоматическим, если оно было включено с помощью ключевого слова Enlist , и не требует вмешательства от разработчика. Поставщик данных платформа .NET Framework для SQL Server обеспечивает поддержку повышения уровня транзакций с помощью классов платформа .NET Framework в пространстве имен System.Data.SqlClient.

Ключевое слово Enlist

Свойство ConnectionString объекта SqlConnection поддерживает ключевое слово Enlist, указывающее, обнаруживает ли System.Data.SqlClient контексты транзакций и автоматически регистрирует соединение в распределенной транзакции. Если для этого ключевого слова задано значение true (по умолчанию), соединение автоматически прикрепляется к текущему контексту транзакции открывающего потока. Если для этого ключевого слова задано значение false, то соединение SqlClient не будет взаимодействовать с распределенной транзакцией. Если перечисление не указано в строка подключения, подключение автоматически добавляется в распределенную транзакцию, если он обнаружен во время открытия подключения.

Распределенные транзакции

Распределенные транзакции обычно потребляют значительные системные ресурсы. Координатор распределенных транзакций Майкрософт (MS DTC) управляет такими транзакциями и интегрирует все диспетчеры ресурсов, к которым обращаются эти транзакции. С другой стороны, повышение транзакций — это специальная форма транзакции System.Transactions , которая эффективно делегирует работу простой транзакции SQL Server. System.Transactions, System.Data.SqlClient и SQL Server координирует работу, связанную с обработкой транзакции, продвигая ее в полную распределенную транзакцию по мере необходимости.

Преимуществом повышения уровня транзакций является то, что при открытии соединения с активной транзакцией TransactionScope , а другие подключения не открываются, транзакция фиксируется как упрощенная транзакция, а не вызывает дополнительных затрат на полную распределенную транзакцию. Дополнительные сведения о TransactionScope см. в разделе "Использование System.Transactions".

См. также

Интеграция со средой CLR и транзакции