Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос с 70-229 / 6 сообщений из 6, страница 1 из 1
13.08.2002, 20:02:21
    #32043004
soniko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос с 70-229
Сегодня сдавал 70-229. Там был такой вопрос

You are a database developer for a clothing retailer. The company has a database named Sales. This database contains a table named Inventory. The Inventory table contains the list of items for sale and the quantity available for each of those items. When sales information is inserted into the database, this table is updated. The stored procedure that updates the inventory table is shown below:

CREATE PROCEDURE UpdateInventory @IntID int
AS
BEGIN

DECLARE @Count int

BEGIN TRAN

SELECT @Count = Available
FROM Inventory WITH (HOLDLOCK)
WHERE InventoryID = @IntID

IF (@Count > 0)
UPDATE Inventory SET Available = @Count – 1
WHERE InventoryID = @IntID

COMMIT TRAN

END

When this procedure executes, the database server occasionally returns the following error message:

Transaction (Process ID 53) was deadlock on {lock} resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

You need to prevent the error message from occurring while maintaining data integrity. What should you do?

A. Remove the table hint.
B. Change the table hint to UPDLOCK.
C. Change the table hint to REPEATABLEREAD.
D. Set the transaction isolation level to SERIALIZABLE.
E. Set the transaction isolation level to REPEATABLE READ.

Я выбрал B. Тем не менее, мне интересно кто какой ответ считает правильным и почему?
...
Рейтинг: 0 / 0
13.08.2002, 20:16:00
    #32043006
sim
sim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос с 70-229
абс верно
...
Рейтинг: 0 / 0
13.08.2002, 21:19:50
    #32043012
Dimos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос с 70-229
Описание UPDLOCK из BOL:

UPDLOCK: Use update locks instead of shared locks while reading a table, and hold locks until the end of the statement or transaction. UPDLOCK has the advantage of allowing you to read data (without blocking other readers) and update it later with the assurance that the data has not changed since you last read it.


Очевидно, что это то, что нам нужно - прочитать данные из таблицы НИКОГО НЕ БЛОКИРУЯ, и сразу же заблокировать нужную часть таблицы НА ЗАПИСЬ пока вы не закончите update.
...
Рейтинг: 0 / 0
14.08.2002, 12:26:17
    #32043134
Shura_M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос с 70-229
Что значит прочитать НИКОГО НЕ БЛОКИРУЯ и одновременно заблокировать НА ЗАПИСЬ?
Если мы блокируем НА ЗАПИСЬ - разве это не значит что мы не хотим чтобы оттуда читали, пока мы не закончим запись.
...
Рейтинг: 0 / 0
14.08.2002, 18:13:04
    #32043310
soniko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос с 70-229
"...and hold locks until the end of the statement or transaction". В данном случае, интересно, блокировка будет только на время SELECT... или до COMMIT TRAN?
...
Рейтинг: 0 / 0
14.08.2002, 18:40:39
    #32043326
dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос с 70-229
Do commit tran, конечно :-))
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос с 70-229 / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]