Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Потеря результатов обновления
Пусть выполняются параллельно две транзакции, каждая из которых выполняет извлечение некоторой записи, ее анализ и последующее обновление. В зависимости от того, какая из двух транзакций завершится позднее, будут утеряны изменения, сделанные ранее завершенной транзакцией. Рассмотрим пример: две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.
Результат. После окончания обеих транзакций, строка P содержит значение P2, занесенное более поздней транзакцией B. Транзакция A ничего не знает о существовании транзакции B, и естественно ожидает, что в строке P содержится значение P1. Таким образом, транзакция A потеряла результаты своей работы. Проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание) Чтение «грязных» данных. Проблема незафиксированной зависимости. Здесь можно, в свою очередь, выделить две ситуации, каждая из которых определяется тем, что одна из двух параллельно выполняющихся транзакций завершается откатом. a) Чтение грязных данных - Транзакция 1 прочитала данные, измененные транзакцией 2, но в последующем транзакция 2 отменила свои изменения. b) Отсутствие потерянных изменений - Транзакция 1 изменяет данные после того, как эти данные были изменены транзакцией 2. Если транзакция 2 аннулирует свои изменения, состояние БД будет восстановлено таким, каким оно было перед началом выполнения транзакции 2. А значит, изменения, сделанные транзакцией 1, также будут аннулированы. Рассмотрим пример: транзакция B изменяет данные в строке. После этого транзакция A читает измененные данные и работает с ними. Транзакция B откатывается и восстанавливает старые данные.
Результат. Транзакция A в своей работе использовала данные, которых нет в базе данных. Более того, транзакция A использовала данные, которых нет, и не было в базе данных! Действительно, после отката транзакции B, должна восстановиться ситуация, как если бы транзакция B вообще никогда не выполнялась. Таким образом, результаты работы транзакции A некорректны, т.к. она работала с данными, отсутствовавшими в базе данных. |
Последнее изменение этой страницы: 2019-04-21; Просмотров: 248; Нарушение авторского права страницы