Программирование >>  Sql: полное руководство 

1 ... 91 92 93 [ 94 ] 95 96 97 ... 264


подтвердить заказ; затем его копия программы обновляет таблицу 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

17 01

HFfl 1D

PRODUCT,ID

ОТУ ON нт

SELECT QTY ON HAND FROM PRODUCTS .. .

41004

Ответ 139

12 04

MFB.IO

PROOUCT.IO

OTVJNJAND

41004

12 05

HFfl ID ) PflDDUCT ID

OTV.OV.HAND

41004

Программа Мэри 12 02

SELECT QTY ON HAND FROM PRODUCTS . . .

Ответ 139

Принять заказ на 125 штук

12 05 1

UPDATE PRODUCTS

SET QTY 0N HAND=14 . . .

Рис. 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

12 01

MFB IO

PBOOucT ID ( OTv os um

SELECT QTY ON HAND FROM PRODUCTS

.. . . , ....

41004 j lag

Принять заказ на 100 штук

12 04

12 04

UPDATE PRODUCTS SET QTY ON HAND=39 . .

12 06

ROLLBACK

ИЯВ 0

PBOOUCT.ID

QTV oh HAND

41004

12 06

KFfl IB (PRODUCT 10 I OTY OH HAm

41004

Программа Мэри

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

FR IO

PROOUCT IO

ату о(1 кш

41004

1201

SELECT QTY ON HAND FROM PRODUCTS ...

Ответ- 139

Принять заказ на 100 штук

12 04

update products set QTY on hand=39 . . .

12 04

HFR 1D

PRODUCT.ID

OTy ON IIAND

41004

39

Программа Мэри


12 02

SELECT QTY ON HAND

FROM PRODUCTS . . .

. . ID=41004

Ответ 139

12 03

SELECT QTY

ON HAND

FROM PRODUCTS . . .

..10=41005

12 05 1

SELECT QTY

.ON HAND

FROM PRODUCTS . . .

..ID=41004

Ответ 39

Рис. 12.8. Проблема нвсоглааоватых даннык,



1 ... 91 92 93 [ 94 ] 95 96 97 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика