Почему это "потерянное обновление" в примере чтения документации Oracle?
В книге "Oracle Database Concepts" Oracle приводит пример, чтобы объяснить Read Committed Isolation Level
,
В этом примере транзакция 1 обновляет строку 1, затем транзакция 2 обновляет эту же строку, прежде чем транзакция 1 фиксируется. Итак, транзакция 2 ожидает, пока транзакция 1 не зафиксируется. Затем транзакция 1 фиксируется. Транзакция 2 фиксируется после этого. Конечно, после фиксации транзакции 2 обновление строки 1 транзакцией 1 отменяется транзакцией 2.
Рассматривать эту ситуацию как lost update
, Но, на мой взгляд, это не должно быть "потерянное обновление", поскольку транзакция 1 зафиксирована. Потерянное обновление рассматривается в одной транзакции. Расписание даже равно сериализуемому расписанию независимо от операций чтения.
Пример здесь или, более конкретно, здесь.
В глоссарии Oracle потерянное обновление -
Проблема целостности данных, при которой один источник данных перезаписывает изменения другого модуля записи, модифицирующего одни и те же данные.
Итак, что вы думаете об этом? Является ли это "потерянным обновлением", и если да, можно ли избежать такого рода потерянных обновлений за счет параллельного управления базой данных?
Любые комментарии и помощь будут оценены.
1 ответ
Это считается "потерянным обновлением", потому что Сессия 2 изменила изменение, сделанное Сессией 1, не зная, что это происходит. Что касается Сессии 2, она прочитала строку "Банда" с зарплатой 6200 и обновила ее до 6300 - она никогда не видела обновления Сессии 1 до 7000.
Как говорится в этой документации: "разработка стратегии обработки потерянных обновлений является важной частью разработки приложений", то есть она не является частью встроенной функциональности параллелизма данных в СУБД. В рамках транзакции это можно сделать с помощью select for update
попытаться заблокировать ряд. В этом примере выбор 2-го сеанса строки "Банда" был бы заблокирован, если бы он это сделал. Как только сессия 1 будет завершена, сессия 2 получит блокировку и увидит новую зарплату. В среде без состояний, такой как веб-приложение, для этого используется оптимистическая блокировка.