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

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

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

Свойства классических транзакций (ACID-транзакций)

Атомарность (Atomicity) – транзакция должна быть выполнена в целом или не выполнена вообще.

Согласованность (Consistency) – в результате транзакции данные переходят из одного согласованного состояния в другое согласованное состояние.

Изолированность (Isolation) конкурирующие транзакции обрабатываются изолированно друг от друга (но пользователи видят параллельное выполнение).

Долговечность (Durability) если транзакция зафиксирована, ее результаты должны быть долговечными. Новое состояние сохранится даже в случае системных сбоев.

Режимы выполнения транзакций

Рассмотрим поддержку транзакций в некоторых популярных СУБД.

Существуют три режима:

Режим автоматической фиксации.

Неявный режим транзакций.

Явный режим транзакций.

Режим автоматической фиксации

Каждый оператор SQL фиксируется по завершении (каждый запрос SQL – отдельная транзакция). При успешном завершении оператора БД переходит в новое устойчивое состояние.

Автофиксация – режим по умолчанию для каждого соединения с MS SQL Server. Автофиксация используется, пока не заработает явная транзакция или же не будет задана неявная транзакция.

В Oracle и MySQL автофиксация по умолчанию не задана. Этот режим включается и выключается командами

SET AUTOCOMMIT.

Неявный режим транзакций (1)

Стандарт ANSI/ISO SQL определяет неявное начало транзакции и явное ее завершение инструкциями

COMMIT или ROLLBACK.

Стандарт SQL92/99 также определяет неявные транзакции, которые начинаются, когда пользователь соединяется с БД. Инструкция DDL или DML в сеансе открывает (продолжает) транзакцию. Когда транзакция заканчивается фиксацией или откатом, сразу начинается новая.

Поддерживается Oracle (режим задан по умолчанию). Не разрешены вложенные транзакции.

Неявный режим транзакций (2)

Транзакция завершается фиксацией, если:

пользователь задает команду COMMIT (успешное завершение транзакции; изменения, внесенные в БД в рамках транзакции, становятся постоянными);

сессия, в которой была инициирована текущая транзакция, завершается обычным образом (пользователь пишет EXIT);

пользователь задает выражение на языке определения данных (команды CREATE, DROP или ALTER).

Неявный режим транзакций (3)

Транзакция завершается откатом, если:

пользователь выдает команду ROLLBACK (прерывает транзакцию, отменяя изменения, сделанные в БД в рамках этой транзакции);

сессия БД завершается аномальным образом (отменяется соединение клиента либо БД повреждается или выключается с использованием установок, прекращающих клиентские соединения).

Явный режим транзакций

Поддерживается MS SQL Sever и MySQL (расширенная модель управляемого выполнения транзакций):

BEGIN TRANSACTION – начало транзакции;

COMMIT TRANSACTION – успешное завершение транзакции (новая транзакция не начинается);

SAVE TRANSACTION – создает внутри транзакции точку сохранения (с указанным именем);

ROLLBACK – без параметра интерпретируется как оператор отката всей транзакции, с параметром – как оператор отката в точку сохранения.

Операторы управления транзакциями

(явный режим) в MS SQL Server (1)

Операторы управления транзакциями

(явный режим) в MS SQL Server (2)