|
Нужно сделать монопольную блокировку на читаемую стороку
|
|||
---|---|---|---|
#18+
А именно я выбираю из таблицы MyTable строку, в которой в дальнейшем хочу изменить параметры. Но при этом мне надо чтоб эту строку никто не смог нипрочесть, не темболее изменить, а другие строки не попавшие в данный запрос были открыты. Мои сооброжения следующие: begin tran up_my_row select column1 from MyTable -- здесь (по моему) должна стаять блокировка, но какая вот в чем вопрос? where column2 = 234 /* операторы */ update MyTable set column1 = column1 + 10 where column2 = 234 commit tran up_my_row Если есть еще какие возможные решения данной задачи, то я с большим удовольствием прочту. С уважением. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2001, 17:25 |
|
Нужно сделать монопольную блокировку на читаемую стороку
|
|||
---|---|---|---|
#18+
перед транзакцией надо поставить: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2001, 19:45 |
|
Нужно сделать монопольную блокировку на читаемую стороку
|
|||
---|---|---|---|
#18+
недели 2 назад эта тема тут активно обсуждалась основное мнение было - такие блокировки надо делать самому: вести таблицы блокировок, писать триггеры, процедуры и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2001, 10:06 |
|
Нужно сделать монопольную блокировку на читаемую стороку
|
|||
---|---|---|---|
#18+
Если изменять уровень изоляции до указанного, то получается следующее: если в один момент к записи обратяться два пользователя, то первый отработает как надо, а второй отвалиться из-за конфликта (что собственно я пытаюсь избежать). Со вторым случаем тоже непонятно как я смогу заблокировать запись с помощью таблицы блокировок, писать триггеры, процедуры и т.д., если по прежнему пользователи могут использовать запись одновременно? Ведь к таблице блокировок также могут обратиться два пользователя и попытаться наложить на запись свои прова одновременно. Как быть при таком раскладе? P.S. Если место где написанно "-- здесь (по моему) должна стаять блокировка, но какая вот в чем вопрос?" заменить на "(TABLOCKX)", то все работает замечательно первый пользователь обрабатываеться,а второй стоит в очереди и никто при этом не отваливаеться, но есть одно "но" - блакируеться вся таблица, а надо только обрабатываемую запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2001, 12:25 |
|
Нужно сделать монопольную блокировку на читаемую стороку
|
|||
---|---|---|---|
#18+
а пробовал from MyTable ROWLOCK ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2001, 13:09 |
|
Нужно сделать монопольную блокировку на читаемую стороку
|
|||
---|---|---|---|
#18+
UPDLOCK ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2001, 13:42 |
|
Нужно сделать монопольную блокировку на читаемую стороку
|
|||
---|---|---|---|
#18+
Насчет второго случая: а вот таблицу блокировок надо апдейтить с ключом "(TABLOCKX)", она должна быть небольшая, это будет происходить быстро ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2001, 14:03 |
|
Нужно сделать монопольную блокировку на читаемую стороку
|
|||
---|---|---|---|
#18+
Я думаю что UPDLOCK и ROWLOCK всетаки не для моего случая. ROWLOCK начинает действовать с уровня изоляции REPEATABLE READ, но тогда кто-то из двух отвалиться (почему-то первый запрасивший запись). UPDLOCK накладывает блокировку на UPDATE, а мне надо и на SELECT. TABLOCKX приемлемый вариант (если таблица небольшая) - я так пока все и сделал. Всем спасибо за участие в решение моей проблемы. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2001, 17:13 |
|
|
start [/forum/topic.php?fid=46&msg=32002252&tid=1827342]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 400ms |
0 / 0 |