Таблица 12 Тран закции Л Время Транзакция В — ti Чтение Р=Р0 — t2 Запись Р —* ■ Чтение P=Pi ......... ............. t3 1 1 Работа с прочитанными данными Pi и 1 . ........................ Фиксация транзакции ** *6 Откат транзакции Р«—*Р Работа с "грязными" данными Результат. Транзакция «А» в своей работе использовала данные, которых нет в базе данных. Более того, транзакция «А» использовала данные, которых нет, и не было в базе данных! Действительно, после отката транзакции «В», должна восстановиться ситуация, как если бы транзакция «В» вообще никогда не выполнялась. Таким образом, результаты работы транзакции А некорректны, т.к. она работала с данными, отсутствовавшими в базе данных. Проблема несовместимого анализа включает несколько различных вариантов: • Неповторяемое считывание. • Фиктивные элементы (фантомы). • Собственно несовместимый анализ. Неповторяемое считывание. Транзакция «А» дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция «В», которая изменяет значения в строке. Транзакция «А» ничего не знает о существовании транзакции «В», и, т.к. сама она не меняет значение в строке, то ожидает, что после повторного чтения значение будет тем же самым. Результат. Транзакция «А» работает с данными, которые, с точки зрения транзакции «А», самопроизвольно изменяются (таблица 13). |
Транзакция B изменяет данные в строке. После этого транзакция A читает измененные данные и работает с ними. Транзакция B откатывается и восстанавливает старые данные. Транзакция A Время Транзакция B --Чтение --Запись Чтение --Работа с прочитанными данными ----Откат транзакции Фиксация транзакции --Работа с "грязными" данными С чем же работала транзакция A? Результат. Транзакция A в своей работе использовала данные, которых нет в базе данных. Более того, транзакция A использовала данные, которых нет, и не было в базе данных! Действительно, после отката транзакции B, должна восстановиться ситуация, как если бы транзакция B вообще никогда не выполнялась. Таким образом, результаты работы транзакции A некорректны, т.к. она работала с данными, отсутствовавшими в базе данных. Проблема несовместимого анализа Проблема несовместимого анализа включает несколько различных вариантов: Неповторяемое считывание. Фиктивные элементы (фантомы). Собственно несовместимый анализ. Неповторяемое считывание Транзакция A дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке. Транзакция A Время Транзакция B Чтение ----Чтение --Запись --Фиксация транзакции Повторное чтение --Фиксация транзакции --Неповторяемое считывание |