Базы данных. Вводный курс

         

Отсутствие потерянных изменений (первый уровень изолированности)


Рассмотрим сценарий совместного выполнения двух транзакций, показанный на рис. 13.1. В момент времени t1

транзакция T1

изменяет объект базы данных o

(выполняет операцию W(o)). До завершения транзакции T1

в момент времени t2

> t1

транзакция T2

также изменяет объект o. В момент времени t3

> t2

транзакция T2

завершается оператором ROLLBACK

(например, по причине нарушения ограничений целостности).


Рис. 13.1. Потерянные изменения

Тогда при повторном чтении объекта o

(выполнении операции R(o)) в момент времени t4

> t3

транзакция T1

не видит своих изменений этого объекта, произведенных ранее (в частности, из-за этого может не удастся фиксация этой транзакции, что, возможно, повлечет потерю изменений у еще одной транзакции и т.д.).

Такая ситуация называется ситуацией потерянных изменений. Естественно, она противоречит требованию изолированности пользователей. Чтобы избежать такой ситуации в транзакции T1

требуется, чтобы до завершения транзакции T1

никакая другая транзакция не могла изменять никакой измененный транзакцией T1

объект o

(в частности, достаточно заблокировать доступ по изменению к объекту o

до завершения транзакции T1). Отсутствие потерянных изменений является минимальным требованием к СУБД при обеспечении изолированности одновременно выполняемых транзакций.



Содержание раздела