Блокировка на вкладке SSMS - PullRequest
0 голосов
/ 15 февраля 2011

Этот sutiation может быть легко воспроизведен в вашей тестовой среде. Откройте SSMS и подключитесь к вашему серверу. Откройте вкладку «Новый запрос», подключенную к базе данных MYTEST (я предполагаю, что MYTEST подключен к сети). Не делайте ничего с этой вкладкой. Откройте новую вкладку, подключенную к той же базе данных. Введите следующий код в новой вкладке

USE master
GO
ALTER DATABASE MYTEST
SET OFFLINE

Ваш код будет заблокирован процессом, запущенным на первой вкладке (см. «Монитор активности»). Почему выполнение блокируется, хотя в первой вкладке нет задачи, связанной с процессом?

1 Ответ

2 голосов
/ 15 февраля 2011

Вам нужно указать SQL, чтобы выбрасывать каждое соединение

ALTER DATABASE MYTEST
SET OFFLINE
WITH ROLLBACK IMMEDIATE

Это по проекту : соединение с базой данных имеет общую блокировку БД, независимо от того, выполняется она или нет.

WITH <termination>::=

Указывает, когда выполнять откат незавершенных транзакций при переходе базы данных из одного состояния в другое.Если предложение завершения опущено, оператор ALTER DATABASE ожидает неопределенно долго, если в базе данных есть какая-либо блокировка.Можно указать только одно условие завершения, и оно следует за предложениями SET.

Просто запустите sp_lock (или каковы новые dmvs :-), и вы увидите их

...