|
Программирование >> Sql: полное руководство
подтвердить заказ; затем его копия программы обновляет таблицу products, показывая, что в наличии осталось 39 изделии АС1-41004, и добавляет в таблицу orders новый заказ на 100 изделий. Через несколько секунд Мэри просит своего клиента подтвердить заказ. Ее копия программы обновляет таблицу products, показывая, что на складе осталось 14 изделий ACI-41004, и добавляет в таблицу orders новый заказ на 125 изделий. Программа Джо Принять заказ на 100 штук 12 04 UPDATE PRODUCTS SET QTY ON HAND=39. Таблица PRODUCTS 12 00
12 04
Программа Мэри 12 02
Принять заказ на 125 штук
Рис. 12.6. Проблема пропавшего обновления Очевидно, что обработка этих двух заказов привела к возникновению противоречия в базе данных. Первое из двух обновлений таблицы products пропало! Заказы от обоих клиентов приняты, но на складе нет достаточного количества изделий для удовлетворения обоих заказов. Более того, таблица products показывает, что в наличии осталось еще 14 изделий! Данный пример показывает, что проблема пропав-Щего обновления может возникнуть всякий раз, когда две программы извлекают из базы одни и те же данные, используют их для каких-либо расчетов, а затем пытаются обновить эти данные. Проблема промежуточных данных На рис. 12.7 изображена схема работы той же программы для обработки заказов, то и на рис. 12.6. Джо снова начинает принимать от клиента заказ на 100 изделий Cl-41004. На этот раз его копия программы запращиваег таблицу products, 2Ь[ясняет, что в наличии имеется 139 изделий, и обновляет таблицу products показывая, что после принятия заказа в наличии осталось 39 изделий После этого Джо начинает обсуждать с клиентом относительные достоинства изделий ACI-41004 и АС/-41005 Тем временем клиент Мэри пытается заказать 125 изделий ACI-41004 Ее копия программы запрашивает таблицу products, выясняет, что в наличии имеется только 39 изделий, и отказывается принять заказ Профамма генерирует также сообщение для менеджера по снабжению о гом, что необходимо закупить изделия ACI-41004, которые пользуются большим спросом А первый клиент после беседы с Джо решает, что изделия ACI-41004 ему вовсе не нужны, и профамма выполняет инструкцию rollback ДЛЯ отмены транзакции. Программа Джо Таблица PRODUCTS 12 00
Принять заказ на 100 штук 12 04 12 04 UPDATE PRODUCTS SET QTY ON HAND=39 . . 12 06 ROLLBACK
Программа Мэри 12 05 SELECT QTY ON HAND FROM PRODUCTS . . . Ответ 39 ринимать заказ на 125 штук Внимание закупить еще Рис. 12 7. Проблема промежуточных данных Поскольку программа Мэри имела доступ к промежуточным данным профаммы Джо, ее клиенту было отказано в приеме заказа, а менеджер по снабжению закажет дополнительное количество изделий ACI-41004, хотя их на складе и так 139 штук Ситуация могла бы быть еше хуже, если бы клиент Мэри решил заказагь 39 изделий В этом случае профамма Мэри занесла бы в таблицу products число ноль, показывая, что изделия ACI-41004 на складе отсугствуют. Но после операции rollback, отменяющей транзакцию Джо, СУБД восстановит в таблице число 139, хотя 39 изделий из них уже предназначены клиенту Мэри. В данном примере проблема заключается в том, что профамма Мэри имела доступ к промежуточным результатам профаммы Джо и, опираясь на них, занесла в базу данных ошибочную информацию В стандарте SQL2 эта проблема обозначена как PI , или проблема промежуточной выборки . Выражаясь языком стандарга, данные, которые извлекала профамма Мэри, являлись промежуточными, так как еще не были подтверждены профаммой Джо проблема несогласованных данных На рис. 12.8 изображена еще одна схема работы программы для обработки заказов. Джо снова начинает принимать от своего клиента заказ на 100 изделий ACI-41004 Вскоре после этого Мэри начинает со своим клиентом разговор об этих же изделиях, и ее программа выясняет их количество на складе. Затем клиент начинает расспрашивать Мэри об изделиях ACJ-41005, и профамма Мэри выполняет запрос о наличии этих изделий. Тем временем клиент Джо решает заказать изделия ACI-41004, поэтому его профамма обновляет соответствующую Сфоку и выполняет инструкцию commit, завершая фанзакцию по приему заказа После некоторых размышлений клиент Мэри решает заказать изделия ACI-41004, которые Мэри предлагала ему вначале. Ее профамма вновь запрашивает информацию об изделиях ACI-41004 Но новый запрос показывает, что в наличии имеется только 39 изделий вместо 139, показанных предыдущим запросом несколько секунд тому назад. Профамма Джо Таблица PRODUCTS 12 00
1201 SELECT QTY ON HAND FROM PRODUCTS ... Ответ- 139 Принять заказ на 100 штук 12 04 update products set QTY on hand=39 . . . 12 04
Программа Мэри 12 02
Рис. 12.8. Проблема нвсоглааоватых даннык,
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |