При работе с базами данных в Microsoft SQL Server Management Studio можно столкнуться с ситуацией, когда процедура перевода базы данных в Offline затягивается на очень длительное время…
В ряде случаев причиной такого поведения являются активные соединения с базой данных. Во многих источниках на такой случай можно найти рекомендацию перевода в состояние Offline с помощью инструкции WITH ROLLBACK IMMEDIATE, которая должна закрыть все активные соединения …
USE master GO ALTER DATABASE [Имя базы данных] SET OFFLINE WITH ROLLBACK IMMEDIATE GO
Однако такой метод не всегда помогает, и в результате мы можем получить ошибку, говорящую о проблеме блокировки базы данных…
Чтобы получить информацию об активных сессиях с интересующей нас базой данных выполним SQL-запрос:
USE master GO SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('Имя базы данных') GO
Из полученного вывода станет понятно, – какой именно пользователь и из какого приложения “держит” нашу базу данных. Одним из интересующих нас показателей будет идентификатор соединения - spid
Помимо представленного примера информацию о всех активных соединениях к серверу БД можно получить с помощью хранимых процедур sp_who или sp_who2:
EXEC sp_who2
Выяснив идентификатор соединения можно его “прибить” командой:
KILL <spid>
После сброса активных сессий интересующая нас база данных должна успешно завершить переход состояние Offline.
Добавить комментарий