Наибольший уровень изоляции транзакций достигается при значении SERIALIZABLE (последовательное выполнение или сериализуемость). В этом случае различные транзакции будут полностью изолированы друг от друга. И не могут влиять друг на друга. Пока не будет завершена начавшаяся транзакция, другая должна ожидать её завершения. Но это приводит к заметному снижению производительности системы. На любом уровне ниже SERIALIZABLE появляется риск нарушения целостности базы данных. Но иногда на этот риск идут во имя повышения производительности. Для этого и используют соответствующие уровни изоляции.
По умолчанию в большинстве СУБД используется режим READ WRITE и уровень изоляции SERIALIZABLE . Если необходимо установить другие параметры транзакции, отличающиеся от значений по умолчанию, то в нужный момент следует применить команду SET TRANSACTION, например,
SET TRANSACTION
READ ONLY,
ISOLATION LEVEL READ COMMITED ;
С этого момента следующая транзакция будет иметь уже параметры режим READ ONLY и уровень изоляции READ COMMITED.
Субтранзакции
Версия SQL:1999 или SQL3 ввела многоуровневые транзакции, т.е. транзакции могут состоять из нескольких субтранзакций. Субтранзакции имеют точки отката, которые устанавливаются с помощью оператора SAVEPOINT (точка отката или сохранения). Точка отката создается с помощью оператора вида
SAVEPOINT имя_точки_отката;
Этот оператор применяется вместе с оператором ROLLBACK:
ROLLBACK TO SAVEPOINT имя_точки_отката;
Благодаря этому можно отменять не всю транзакцию, а только ту её часть, которая расположена между ROLLBACK и точкой отката. База данных возвращается в предыдущее состояние. В этом случае сознательно нарушается свойство атомарности всей транзакции.
Журнал транзакций
Для фиксации хода выполнения транзакций, т.е. изменений в БД, многие СУБД ведут во внешней (дисковой) памяти специальный журнал в базе данных, называемый журналом транзакций или журналом изменений. Он содержит сведения обо всех изменениях, выполненных в БД. Поэтому журнал может использоваться для восстановления БД после сбоя. Только после записи всех изменений в журнал транзакций, информация переносится из оперативной памяти во внешнюю.
В файл журнала может помещаться следующая информация:
|
Пример
Номер |
Иденти- фикатор |
Указатель назад |
Указатель вперед |
Время |
Операция |
Объект |
Старое значение |
Новое значение |
1 |
ОТ1 |
0 |
2 |
9:12 |
START |
|||
2 |
ОТ1 |
1 |
4 |
9:13 |
UPDATE |
5, 7 |
(ст. знач.) |
(нов. знач.) |
3 |
ОТ2 |
0 |
8 |
9:16 |
START |
|||
4 |
ОТ1 |
2 |
5 |
9:17 |
UPDATE |
5, 10 |
(ст. знач.) |
(нов. знач.) |
5 |
ОТ1 |
4 |
7 |
9:17 |
INSERT |
11, 2 |
||
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 |
8, 5 |
(ст. знач.) |
(нов. знач.) |
10 |
КТ2 |
9 |
0 |
9:21 |
COMMIT |
Журнал должен содержать копию каждой записи перед её изменением (старое значение) и после её изменения (новое значение). Все действия каждой транзакции связаны между собой указателями. Указатель назад указывает на предыдущее изменение, сделанное данной транзакцией. Например, в строке 7 транзакция ОТ1 ссылается на строку 5, которая является предыдущим действием этой транзакции. Указатель вперед ссылается на следующее изменение, выполненное данной транзакцией (прямой указатель). В строке 4 указатель вперед указывает на строку 5. Нуль в поле указателя означает конец списка. Транзакция будет завершена.
Подсистема восстановления использует эти указатели для отыскания всех записей, относящихся к данной транзакции. В случае отката транзакции журнал просматривается (сканируется) в обратном направлении. Все изменения отменяемой транзакции просматриваются и заменяются старыми (прежними) значениями.
Многие СУБД также периодически выполняют контрольные точки. Контрольная точка — это момент времени, в который все изменения в БД до текущей транзакции гарантированно записаны во внешнюю память. В журнал изменений вносится отметка контрольной точки. После прохождения контрольной точки информация в журнале изменений до этого номера может быть удалена или заархивирована, т.к. она записана в БД.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.