Во избежание подобных ситуаций (см. выше) следует обеспечить согласованность выполнения параллельных транзакций, их изолированность друг от друга. Сериализация транзакций – это механизм выполнения транзакций по некоторому плану. Обеспечение такого механизма есть основа СУБД по части управления транзакциями.
Этот механизм опирается на следующие правила:
1. В процессе выполнения транзакции программа «видит» только согласованные состояния БД. Пользователь никогда не может получить доступ к незафиксированным изменениям в данных, произведенных другой программой.
2. Если 2 транзакции А и В выполняются параллельно, то СУБД полагает, что результат будет такой же, как если бы транзакция А выполнялась бы первой, за ней выполнялась бы транзакция В, т.е. выполнение последовательное.
3. Между транзакциями могут возникнуть следующие виды конфликтов:
W-W
Транзакция 2 пытается изменить объект, измененный незаконченной транзакцией 1
R-W
Транзакция 2 пытается изменить объект, прочитанный незаконченной транзакцией 1
W-R
Транзакция 2 пытается прочитать объект, измененный незаконченной транзакцией 1
Методы сериализации транзакций должны учитывать эти конфликты.
У всех методов есть плюсы и минусы.
Метод синхронизированных блокировок.
Этот метод наиболее распространен для централизованных СУБД. В том числе для систем архитектуры «сервер-клиент». Суть его в том, что перед выполнением любой операции в транзакции «Т» над объектом БД «А» от имени транзакции «Т» запрашивается «захват» объекта «А» в одном из двух режимов:
1. режим S (Shared) – совместный. Означает разделяемый захват объекта и требуется для выполнения операции «чтение объекта».
2. режим X (eXclusive) – монопольный захват объекта. Требуется для выполнения операций занесения, удаления, модификации.
Захват объекта несколькими транзакциями по чтению совместимы, т.е. транзакции могут одновременно читать один и тот же объект.
Захват объектов одной транзакцией по чтению не совместим с захватом этого же объекта другими транзакциями по записи, и, тем более, не совместимы захваты объекта разными транзакциями по записи.
Состояние объекта\Возможность захвата
X
S
-
Да
Да
X
Нет
Нет
S
Нет
Да
Пояснение к таблице.
Вертикальный столбец – то состояние, в котором находится объект. Горизонтальный столбец – возможно ли такое состояние (захват) или нет.
Если запрашиваемая блокировка со стороны второй транзакции отвергается, то вся вторая транзакция переходит в режим ожидания. Х-блокировки не снимаются до конца выполнения транзакции (до выполнения операторов COMMIT и ROLLBACK).