Лекции / Л-6 - Сеансы, транзакции и блокировки
.pdfЗамечания к таблице операторов явных транзакций
Воператорах, связанных с транзакциями, имена транзакций и точек сохранения можно задавать:
обычным образом;
при помощи ссылки на строковые локальные переменные.
Имена строковых локальных переменных должны начинаться с символа @.
В операторах вместо ключевого слова TRANSACTION можно использовать сокращение TRAN.
Пример установки границ транзакции (явный режим)
Режим неявных транзакций (1)
Для изменения режима транзакций используется оператор
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Присвоение параметру IMPLICIT_TRANSACTIONS
значения ON устанавливает для соединения режим
неявных транзакций.
Значение OFF возвращает соединение в режим с
автоматической фиксацией транзакций.
Режим неявных транзакций (2)
Если соединение находится в режиме неявных транзакций, и не участвует в транзакции, выполнение любой из следующих инструкций начнет транзакцию.
ALTER TABLE |
FETCH |
REVOKE |
|
|
|
BEGIN TRANSACTION |
GRANT |
SELECT |
|
|
|
CREATE |
INSERT |
TRUNCATE TABLE |
|
|
|
DELETE |
OPEN |
UPDATE |
|
|
|
DROP |
|
|
|
|
|
Если соединение уже начало транзакцию, эти инструкции не начинают новую транзакцию.
Определение текущего значения параметра IMPLICIT_TRANSACTIONS
Пример установки границ транзакции (неявный режим)
Транзакция, изменяющая данные в связанных таблицах
Вложенные транзакции
Вкладывать можно только явные транзакции. Поэтому концепция вложенных транзакций не реализована в Oracle, где определены только автономные транзакции.
В SQL Server транзакции можно вкладывать друг в друга (потенциально до бесконечности), причем каждая дочерняя транзакция знает о существовании родительской.
Вложенные транзакции используются для наглядности кода. При подтверждении внутренней транзакции ничего в БД не фиксируется – все изменения подтверждает только внешняя инструкция COMMIT, остальные только уменьшают значение счетчика транзакций.
Переменные, используемые при работе с транзакциями
Количество ожидающих транзакций можно проверить с помощью переменной (функции) @@TRANCOUNT.
Переменная @@TRANCOUNT – количество вложенных запущенных на выполнение и не подтвержденных или отмененных в данном соединении с сервером транзакций. Значение, большее 1, означает, что выполняется транзакция , являющаяся внутренней для главной транзакции.
Переменная @@ERROR – для анализа успешности выполнения операторов обращения к БД. При успешном выполнении оператора имеет значение 0. Очищается при начале выполнения любого другого оператора.
Изменение @@TRANCOUNT при фиксации
Каждый оператор BEGIN TRAN увеличивает число транзакций на 1. Каждый оператор COMMIT уменьшает количество транзакций на 1.