Почему это "потерянное обновление" в примере чтения документации 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 получит блокировку и увидит новую зарплату. В среде без состояний, такой как веб-приложение, для этого используется оптимистическая блокировка.

Другие вопросы по тегам