Рис. 11.7 и 11.8 являются модифицированными вариантами рис. 11.2 и 11.3 соответственно, показывающими, что произошло бы при параллельном исполнении представленных на этих рисунках транзакций под управлением механизма блокирования, используемого в системе DB2. Нетрудно видеть, что операция транзакции А, запрашиваемая в момент t2 (FETCH—на рис. 11.7 и UPDATE—на рис. 11.8), в обоих случаях не выполняется, поскольку это неявный запрос на блокировку R, а такой запрос вступает в конфликт с уже установленной транзакцией В блокировкой типа X. Поэтому А переходит в состояние ожидания. Она остается в этом состоянии до тех пор, пока В не достигнет точки синхронизации, выполняя операцию COMMIT или ROLLBACK. При этом установленная транзакцией В блокировка снимается, и А получает возможность продолжать исполнение. В этот момент А «видит» зафиксированное значение — либо значение, предшествующее исполнению В, если В завершается операцией ROLLBACK, либо значение, соответствующее успешному завершению В, в противном случае. В любом случае А больше не зависит от незафиксированных обновлений.
| Транзакция А | Время | Транзакция В | ||
| — | — | |||
| — | — | |||
| — | t1 | UPDATE R | ||
| — | (запрос блокировки | |||
| — | типа Х для R) | |||
| FETCH R | t2 | — | ||
| (запрос блокировки | — | |||
| типа S для R) | — | |||
| ждать | — | |||
| t3 | точка синхронизации | |||
| ждать | (снять блокировку типа | |||
| Х для R) | ||||
| ждать | — | |||
| повторно: FETCH R | t4 | |||
| (установить блокировку | ||||
| типа S для R) | ||||
| — | ||||
Рис. 11.7. Предотвращается ситуация, когда транзакция А «увидела» бы в момент t2 незафиксированное изменение
| Транзакция А | Время | Транзакция В | ||
| — | — | |||
| — | — | |||
| — | t1 | UPDATE R | ||
| — | (установить блокировку | |||
| — | типа Х для R) | |||
| UPDATE R | t2 | — | ||
| (запрос блокировки | — | |||
| типа Х для R) | — | |||
| ждать | — | |||
| ждать | t3 | точка синхронизации | ||
| ждать | (снять блокировку типа | |||
| Х для R) | ||||
| повторно: UPDATE R | t4 | |||
| (установить блокировку | ||||
| типа Х для R) | ||||
Рис. 11.8. Предотвращается ситуация, когда транзакция А обновила бы в момент t2 незафиксированное изменение






