Я б сказав, що ніколи не використовуйте в графічному інтерфейсі річ "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 або що у вас є, це може бути проблематично.
EDIT : Я подав пропозицію щодо Connect про це (див. Connect # 2687832 ) і також опублікував її в Trello (подано під "Провідник об'єктів").
ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
спочатку ... інакше воно просто сидить і чекає, і для зайнятої бази даних це може бути назавжди.