Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Потеря результатов обновления



Пусть выполняются параллельно две транзакции, каждая из которых выполняет извлечение некоторой записи, ее анализ и последующее обновление. В зависимости от того, какая из двух транзакций завершится позднее, будут утеряны изменения, сделанные ранее завершенной транзакцией.

Рассмотрим пример: две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.

Транзакция A Время Транзакция B
Чтение ---
--- Чтение
Запись ---
--- Запись
Фиксация транзакции ---
--- Фиксация транзакции
Потеря результата обновления    

Результат. После окончания обеих транзакций, строка P содержит значение P2, занесенное более поздней транзакцией B. Транзакция A ничего не знает о существовании транзакции B, и естественно ожидает, что в строке P содержится значение P1. Таким образом, транзакция A потеряла результаты своей работы.

Проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание)

Чтение «грязных» данных. Проблема незафиксированной зависимости. Здесь можно, в свою очередь, выделить две ситуации, каждая из которых определяется тем, что одна из двух параллельно выполняющихся транзакций завершается откатом.

a) Чтение грязных данных - Транзакция 1 прочитала данные, измененные транзакцией 2, но в последующем транзакция 2 отменила свои изменения.

b) Отсутствие потерянных изменений - Транзакция 1 изменяет данные после того, как эти данные были изменены транзакцией 2. Если транзакция 2 аннулирует свои изменения, состояние БД будет восстановлено таким, каким оно было перед началом выполнения транзакции 2. А значит, изменения, сделанные транзакцией 1, также будут аннулированы.

Рассмотрим пример: транзакция B изменяет данные в строке. После этого транзакция A читает измененные данные и работает с ними. Транзакция B откатывается и восстанавливает старые данные.

Транзакция A Время Транзакция B
--- Чтение
--- Запись
Чтение ---
Работа с прочитанными данными ---
--- Откат транзакции
Фиксация транзакции ---
Работа с "грязными" данными    

Результат. Транзакция A в своей работе использовала данные, которых нет в базе данных. Более того, транзакция A использовала данные, которых нет, и не было в базе данных! Действительно, после отката транзакции B, должна восстановиться ситуация, как если бы транзакция B вообще никогда не выполнялась. Таким образом, результаты работы транзакции A некорректны, т.к. она работала с данными, отсутствовавшими в базе данных.


Поделиться:



Последнее изменение этой страницы: 2019-04-21; Просмотров: 248; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.008 с.)
Главная | Случайная страница | Обратная связь