Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
12
Добавлен:
28.06.2021
Размер:
569.37 Кб
Скачать

Замечания к таблице операторов явных транзакций

Воператорах, связанных с транзакциями, имена транзакций и точек сохранения можно задавать:

обычным образом;

при помощи ссылки на строковые локальные переменные.

Имена строковых локальных переменных должны начинаться с символа @.

В операторах вместо ключевого слова 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.