Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как надежно залочить запись?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7266
Hi,

Есть софт (не свой) работающий с очередью сообщений. Работает он приблизительно так

1. Брокер каждую секуду опрашивает очередь сообщений и выдает сообщение на обработку.

select top 1 id, in_msg from conversation where status = 'R'

2. Логически блокирует запись по первичному ключу.

update conversation set process_time = '01/01/2009 13:10', status = 'S' where id = 123

3. По окончанию обработки принимает ответное сообщение и снимает блокировку. Запись готова к отправке.

update conversation set status = 'Y', out_msg where id = 123


Между п.1 и п.2 промещуток времени ~100мсек. Т.е. существует вероятность, что сообщение может быть отдано другому обработчику и оно будет обработано дважды или даже больше, чего происходить не должно.

Как такое сделать?

MSSQL 2000.
23 июн 09, 02:30    [7331148]     Ответить | Цитировать Сообщить модератору
 Re: Как надежно залочить запись?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
п.2 ну например так
update conversation set process_time = '01/01/2009 13:10', status = 'S' where id = 123 and status = 'R'
if @@rowcount=0 return
23 июн 09, 07:08    [7331186]     Ответить | Цитировать Сообщить модератору
 Re: Как надежно залочить запись?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33364
Блог
читайте про хинт READPAST
23 июн 09, 09:43    [7331444]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить