Как создать общую блокировку, блокирующую намеренную эксклюзивную блокировку

Насколько я понимаю, оператор SELECT поместит общую блокировку в строки, которые он вернет. Во время выполнения этого SELECT, если появляется оператор UPDATE, которому нужно получить намеренную монопольную блокировку, тогда этому оператору UPDATE нужно будет ждать, пока оператор SELECT освободит свои общие блокировки.

Я пытаюсь проверить эту вещь с общей блокировкой SELECT, выполнив BEGIN TRAN, а затем запустив SELECT, а не COMMITing, а затем запустив UPDATE в другом сеансе в той же строке. ОБНОВЛЕНИЕ работало нормально - без блокировки, без ожидания. Таким образом, это не должно быть правильным способом симуляции общей блокировки, блокирующей намеренную монопольную блокировку? Можете ли вы дать мне сценарий, в котором я могу создать блокировку с помощью SELECT, которая заставит UPDATE ждать?

Я работаю с SQL Server 2000 и 2005 на связанном сервере: таблица находится на экземпляре 2005 года, выбор происходит на 2000, а обновление выполняется с 2005 года. Все в SSMS 2005.

1 ответ

Вы можете изменить уровни изоляции с READ COMMITTED на REPEATABLE READ или SERIALIZABLE для принудительной блокировки.

Другие вопросы по тегам