Проблема незафиксированной зависимости.

На рис. 15.8, рис. 15.9 приведены в измененном виде примеры, показанные ранее на рис. 15.3 и рис. 15.4 соответственно. Они демонстрируют чередующееся выполнение операций согласно описанному выше протоколу блокировки. Операция для транзакции A в момент времени t2 (извлечение на рис. 15.8 и обновление на рис. 15.9) не будет выполнена. Дело в том, что она является неявным запросом с заданием блокировки для кортежа р, а этот запрос вступает в конфликт с Х-блокировкой, уже заданной транзакцией B. Таким образом, транзакция A переходит в состояние ожидания до тех пор, пока не будет прекращено выполнение транзакции B (до операции окончания или отмены выполнения транзакции B). Тогда заданная транзакцией B блокировка будет снята и транзакция A может быть выполнена. Причем транзакция A будет иметь дело с некоторым фиксированным значением (либо существовавшим до выполнения транзакции B при отмене ее выполнения, либо полученным после выполнения транзакции B). В любом случае транзакция A больше не зависит от незафиксированного обновления.

 

Транзакция A Время Транзакция B
t1 Обновление кортежа р (задание X-блокировки для p)
Извлечение кортежа р (задание S-блокировки для p) t2
Ожидание t3 Отмена выполнения транзакции (снятие X-блокировки для p)
Итог: Извлечение кортежа р (задание S-блокировки для p) t4  

 

рис. 15.8. Транзакция A предохраняется от выполнения операций с незафиксированным изменением в момент времени t2.

 

Транзакция A Время Транзакция B
t1 Обновление кортежа р (задание X-блокировки для p)
Обновление кортежа р (задание X-блокировки для p) t2
Ожидание t3 Отмена выполнения транзакции (снятие X-блокировки для p)
Итог: Обновление кортежа р (задание X-блокировки для p) t4  

 

рис. 15.9. Транзакция A предохраняется от выполнения операций с незафиксированным изменением в момент времени t2.