Чтобы добиться изолированности транзакций, СУБД должна
использовать специальные методы регулирования совместного выполнения
транзакций.
Метод сериализации транзакций – это механизм их выполнения по
такому плану, когда результат совместного выполнения транзакций
эквивалентен результату некоторого последовательного выполнения этих же
транзакций. Обеспечение такого механизма является основной функцией
управления транзакциями. Сериализация транзакций реально обеспечивает
изолированность пользователей.
Простейшим решением является действительно последовательное
выполнение транзакций, но существуют ситуации, когда можно выполнять
операторы разных транзакций в любом порядке, и это не приведет к
проблемным ситуациям. Примерами могут служить транзакции,
выполняющие только операции чтения, или транзакции, работающие с
разными объектами БД.
Между транзакциями могут существовать следующие виды конфликтов:
транзакция 2 пытается изменять объект, измененный
незакончившейся транзакцией 1 (конфликт W-W, запись-запись);
транзакция 2 пытается изменять объект, прочитанный
незакончившейся транзакцией 1 (конфликт R-W, чтение-запись);
транзакция 2 пытается читать объект, измененный незакончившейся
транзакцией 1 (конфликт W-R, запись-чтение).
Для обеспечения сериализации транзакций применяются методы
захвата и освобождения объектов по инициативе транзакции. Транзакция
захватывает объект, что приводит к его блокировке для других транзакций, и
освобождает его только при своем завершении.
Захваты объектов на чтение несколькими транзакциями совместимы
(нескольким транзакциям разрешается читать один объект), захват объекта
одной транзакцией на чтение не совместим с захватом другой транзакцией
этого объекта на запись, захваты одного объекта разными транзакциями на
запись не совместимы.
Тем самым, выделяются два основных режима захватов:
совместный режим – S (Shared), означающий разделяемый захват
объекта и необходимый для выполнения операции чтения объекта;
монопольный режим – X (eXclusive), означающий монопольный
захват объекта и необходимый для выполнения операций записи, удаления и
модификации.