Я бы сказал, что никогда не используйте «Take Offline» в графическом интерфейсе, если вы точно не знаете, что база данных не используется. Ничем. Это трудно понять, не занимаясь легким трудом, так почему бы не сохранить этот скрипт где-нибудь и всегда использовать его?
USE [master];
GO
ALTER DATABASE $dbname$ SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE $dbname$ SET OFFLINE;
И тогда ответная конечно
ALTER DATABASE $dbname$ SET ONLINE;
GO
ALTER DATABASE $dbname$ SET MULTI_USER;
Причина, по которой вам нужно установить его в SINGLE_USER
первую очередь, состоит в том, чтобы выгнать любых существующих пользователей (есть возможность сделать это в диалоговом окне отсоединения, но не в диалоговом окне выключения), поскольку для SQL Server требуется исключительный доступ к базе данных, чтобы это в автономном режиме. Теперь вы, возможно, захотите проделать дополнительную работу, чтобы узнать, кто в данный момент использует базу данных, как если бы вы делали это в середине большой операции резервного копирования или задания ETL, или что у вас, это может быть проблематично.
РЕДАКТИРОВАТЬ : Я подал предложение на Connect об этом (см. Connect # 2687832 ), а также опубликовал его в Trello (подано в «Обозреватель объектов»).
ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
первой выдачи ... в противном случае она просто сидит и ждет, а для занятой базы данных это может быть навсегда.