powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / На время реорганизации дерева тотальное блокирование таблицы?
2 сообщений из 2, страница 1 из 1
На время реорганизации дерева тотальное блокирование таблицы?
    #32031316
N.Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжая ранее начатую тему.
...Решаю задачу, когда пользователь захочет реорганизовать дерево (у меня дерево основано на таблице вложенных множеств). Так вот, несомненно, эта операция будет редко запускаться юзерами (ну не каждый же раз революции на предприятии!) Процесс затрагивает обновления полей lft, rgt всех записей, поэтому на это время необходима, полагаю, тотальная блокировка таблицы - чтобы никто другой не мог ни читать, ни тем более обновлять эту же таблицу.
Т.е. в начале транзакции перестроения указываю: SELECT .... FROM ... WITH (TABLOCKX) WHERE ...
И хинт TABLOCKX будет удерживать блокировку до конца всей транзакции.
Вопрос в том, что будет, если в период транзакции выключится компьютер юзера, инициировавщего эту транзакцию, или ещё какие подобные гадости произойдут. Таблица так и останется заблокированной????
(Переделывать иерархическую систему нет возможности - правила игры определены уже ранее и не мной)
...
Рейтинг: 0 / 0
На время реорганизации дерева тотальное блокирование таблицы?
    #32031345
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это хороший вопрос. Ответ будет состоять из двух частей. Первая - общеизвестна: при убиении соединения SQL Server освобождает все наложенные им блокировки. Это легко проиллюстрировать. Откройте два коннекта. Сделайте на первом

begin tran
select * from orders (tablockx holdlock)

на втором

sp_lock:
spid dbid ObjId IndId Type Resource Mode Status
------ ------ ----------- ------ ---- ---------------- -------- ------
51 6 0 0 DB S GRANT
51 6 21575115 0 TAB X GRANT
53 1 85575343 0 TAB IS GRANT

и еще раз

kill 51
sp_lock:
spid dbid ObjId IndId Type Resource Mode Status
------ ------ ----------- ------ ---- ---------------- -------- ------
53 1 85575343 0 TAB IS GRANT

Вторая часть менее тривиальна и состоит в том, как SQL Server понимает, что соединение сдохло. За это отвечают его сетевые библиотеки. Раньше все было просто: если таймаут кончился, а Ack не получен, клиент отключался нафиг за неуплату. Для TCP/IP время ожидания сидит, напр., в KeepAlive в HKLM\System\CurrentControlSet\Services\TcpIp\Parameters. Аналогично для ост.протоколов. После того, как в Windows 2000 появилась поддержка пресловутой IntelliSense, жизнь, с одной стороны, стала легче (напр., она мгновенно распознает выдергивание кабеля), с другой - процедура настройки какая-то лично для меня неочевидная. Вроде, кажется, все уже выставил - он все равно может случайным образом продержать его все выходные.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / На время реорганизации дерева тотальное блокирование таблицы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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