Разница между неявной и явной транзакции
в чем разница между неявной и явной транзакциями в Sql Server 2008?
Что происходит в фоновом режиме TransactionScope? Я использую TransactionScope, но в SQL server profiler я не вижу "начать транзакцию..." заявление.
Как это работает?
4 ответов
- Неявные Транзакции:http://msdn.microsoft.com/en-us/library/ms188317.aspx
- УСТАНОВИТЬ IMPLICIT_TRANSACTIONS { ON / OFF} http://msdn.microsoft.com/en-us/library/ms187807.aspx
в основном, в c#, когда вы устанавливаете TransactionScope в неявное, он вызывает команду SQL Server SET, чтобы поместить соединение в режим IMPLICIT_TRANSACTIONS. Все, что вы делаете (используя одну из команд, перечисленных во 2-й ссылке) начинает транзакция, которая остается открытой до выдается commit. Если фиксация не выполняется в конце соединения, выполняется неявный откат.
это отличается от параметра OFF, который также помещает каждый оператор в транзакцию-разница в том, что в режиме OFF (поэтому транзакции явны) каждая транзакция (сингулярное утверждение) является тут совершено.
в явном режиме транзакции вам нужно будет явно запустить транзакцию. В неявном режиме транзакции транзакция автоматически запускается после каждой фиксации. Поэтому вам нужно только совершить.
поскольку транзакция запускается "неявно", вы не увидите явное "начало" в журналах. :)
по умолчанию база данных работает в явном режиме транзакций с включенной автокоммитацией транзакций. Что на самом деле означает, что если явный транзакция запускается с помощью begin TRANSACTION, каждое изменение данных запускается в отдельной транзакции, которая фиксируется после инструкции. Это позволяет базе данных откатить весь оператор при сбое (например, массовая вставка или вставка, которая изменяет другие данные в триггере).
неявная транзакция является автоматической фиксации. Нет ни начала, ни конца сделки.
явная транзакция имеет начало, окончание и откат транзакций с помощью команды Начало транзакции, фиксация транзакции и откат транзакции.
в явной транзакции, если между ними возникает ошибка, мы можем откатиться к началу транзакции, что невозможно сделать в неявной транзакции.
SqlTransaction
, которые TransactionScope
использует под обложками-только отправляет T-SQL BEGIN TRANSACTION
команды для SQL Server 2000 и более ранних.
для SQL Server 2005 и более поздних версий протокол TDS был расширен, чтобы позволить клиентам напрямую манипулировать транзакциями без отправки BEGIN TRANSACTION
etc. Чтобы увидеть их в Профилировщике, выберите события "TM: Begin Tran starting" и т. д. Вероятно, вам нужно будет установить флажок "Показать все события", чтобы увидеть эти события - они находятся под транзакциями категория.
посмотреть Запрос Менеджера Транзакций в документации протокола TDS,TM: начать Tran начиная класс событий в документации профилировщика и SqlInternalTransaction.ExecuteTransactionYukon в справочном источнике .NET.