Фев 272025
Иногда возникает необходимость перевести какую либо СУБД в однопользовательский режим, чтобы никто не мешался, и не дай бог не испортил БД. Но при этом, существует проблема, когда SQL не дает возможности перевести БД обратно в многопользовательский режим. Как это исправить, указано в скрипте ниже.
Что он делает:
1. Находит процессы, которые не дают подключиться к необходимой БД.
2. Убивает процессы, связанные с необходимой БД.
3. Переводит БД в режим MULTI_USER.
USE master
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses
WHERE spid > 50 AND dbid = DB_ID('<your_db_name>')
EXEC(@kill);
GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [</your_db_name><your_db_name>] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [</your_db_name><your_db_name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses
WHERE spid > 50 AND dbid = DB_ID('<your_db_name>')
EXEC(@kill);
GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [</your_db_name><your_db_name>] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [</your_db_name><your_db_name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
Полезные ссылки:
Single mode SQL