Материал: Л-6 - Сеансы, транзакции и блокировки

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Пример установки границ транзакции (неявный режим)

Транзакция, изменяющая данные в связанных таблицах

Вложенные транзакции

Вкладывать можно только явные транзакции. Поэтому концепция вложенных транзакций не реализована в Oracle, где определены только автономные транзакции.

В SQL Server транзакции можно вкладывать друг в друга (потенциально до бесконечности), причем каждая дочерняя транзакция знает о существовании родительской.

Вложенные транзакции используются для наглядности кода. При подтверждении внутренней транзакции ничего в БД не фиксируется – все изменения подтверждает только внешняя инструкция COMMIT, остальные только уменьшают значение счетчика транзакций.

Переменные, используемые при работе с транзакциями

Количество ожидающих транзакций можно проверить с помощью переменной (функции) @@TRANCOUNT.

Переменная @@TRANCOUNT – количество вложенных запущенных на выполнение и не подтвержденных или отмененных в данном соединении с сервером транзакций. Значение, большее 1, означает, что выполняется транзакция , являющаяся внутренней для главной транзакции.

Переменная @@ERROR – для анализа успешности выполнения операторов обращения к БД. При успешном выполнении оператора имеет значение 0. Очищается при начале выполнения любого другого оператора.

Изменение @@TRANCOUNT при фиксации

Каждый оператор BEGIN TRAN увеличивает число транзакций на 1. Каждый оператор COMMIT уменьшает количество транзакций на 1.