Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_14.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
202.75 Кб
Скачать

Субтранзакции

Версия SQL:1999 или SQL3 ввела многоуровневые транзакции, т.е. транзакции могут состоять из нескольких субтранзакций. Субтранзакции имеют промежуточные точки отката, которые устанавливаются с помощью оператора SAVEPOINT (точка отката или сохранения). Точка отката создается с помощью оператора вида

SAVEPOINT имя_точки_отката;

Этот оператор применяется вместе с оператором ROLLBACK:

ROLLBACK TO SAVEPOINT имя_точки_отката;

Благодаря этому можно отменять не всю транзакцию, а только ту её часть, которая расположена между ROLLBACK и точкой отката. В этом случае сознательно нарушается свойство атомарности всей транзакции.

Журнал транзакций

Для фиксации хода выполнения транзакций, т.е. изменений в БД, многие СУБД ведут во внешней (дисковой) памяти специальный журнал в базе данных, называемый журналом транзакций (log) или журналом изменений. Он содержит сведения обо всех изменениях, выполненных в БД в хронологическом порядке. Только после записи всех изменений в журнал транзакций, информация переносится из оперативной памяти во внешнюю и транзакция будет завершена. Поэтому журнал может использоваться для восстановления БД после сбоя.

Журнал должен содержать копию каждой записи или страницы БД перед её изменением. Такие сведения называют исходными образами (старые значения). Отмена транзакций производится записью в базу данных исходных образов всех произведенных изменений (новые значения).

Также журнал должен содержать копии всех записей после их изменения. Их называют конечными образами данных (новые значения).

Таким образом, в файл журнала может помещаться следующая информация:

Порядковый номер

Идентификатор транзакции Тип операции

Указатель назад Объект изменений

Указатель вперед Старое значение (исходный образ)

Время начала и завершения Новое значение (конечный образ)

Пример

Номер

Иденти-

фикатор

Указатель

назад

Указатель

вперед

Время

Операция

Объект

изменений

Старое

значение

Новое

значение

1

ОТ1

0

2

9:12

START

2

ОТ1

1

4

9:13

UPDATE

Заказчик А

(ст. знач.)

(нов. знач.)

3

ОТ2

0

8

9:16

START

4

ОТ1

2

5

9:17

UPDATE

Товар 100

(ст. знач.)

(нов. знач.)

5

ОТ1

4

7

9:17

INSERT

Заказ 12

значение

6

КТ1

0

9

9:18

START

7

ОТ1

5

0

9:19

COMMIT

8

ОТ2

3

0

9:20

COMMIT

9

КТ1

6

10

9:21

UPDATE

Заказ 85

(ст. знач.)

(нов. знач.)

10

КТ2

9

0

9:21

COMMIT

START означает начало транзакции, COMMIT - её окончание, INSERT ,UPDATE, DELETE - действия транзакции Все действия каждой транзакции связаны между собой указателями. Указатель назад указывает на предыдущее изменение, сделанное данной транзакцией. Например, в строке 7 транзакция ОТ1 ссылается на строку 5, которая является предыдущим действием этой транзакции. Указатель вперед ссылается на следующее изменение, выполненное данной транзакцией (прямой указатель). В строке 4 указатель вперед указывает на строку 5. Нуль в поле указателя означает конец списка. Транзакция будет завершена.

Подсистема восстановления использует эти указатели для отыскания всех записей, относящихся к данной транзакции. Программа восстановления БД заменяет каждую изменённую запись её исходным образом. Когда имеется копия ранней версии БД, то можно повторно выполнить транзакции записью из журнала транзакций конечных образов данных.