При переводе базы данных в автономный режим (OFFLINE) SQL Server ее полностью отключает, освобождает файлы, и дальнейшие подключения к базе данных будут невозможны.
Эта функциональность может быть полезна, например, для того чтоб скопировать файлы данных (при работе SQL Server их блокирует и скопировать их стандартными средствами невозможно), или когда требуется отключить базу данных от внешнего мира по другим причинам.
Для того, чтоб перевести базу данных в автономный режим с помощью SQL Server Management Studio, нужно в контекстном меню базы данных выбрать пункт Tasks - Take Offline.
После выбора этого пункта база данных будет переведена в автономный режим:
Предупреждение - мастер не просит подтверждения операции! База данных переводится в автономный режим сразу же после нажатия пункта Take Offline.
Теперь в списке база данных, переведенная в автономный режим, поменчается специальным знаком и надписью Offline
Дальнейшие операции с базой данных невозможны.
При попытке подключиться к ней, будет получено исключение SqlException:
Cannot open database "test" requested by the login. The login failed. Login failed for user 'WIN-WN7Y6PAT6BX\Administrator'.
Для того, чтоб вернуть базу данных обратно в нормальный режим работы (ONLINE), нужно в контекстном меню выбрать пункт Bring Online
После выбора этого пункта меню, база данных будет возвращена в режим ONLINE.
Подтверждение операции Bring Online также не требуется
После этого с базой данных можно нормально работать.
Выполнить эти операции можно и с помощью скрипта.
Для перевода в режим OFFLINE:
ALTER DATABASE [test] SET OFFLINE
Для перевода обратно в режим ONLINE:
ALTER DATABASE [test] SET ONLINE
Если вы выполняете эти команды в SQL Server Management Studio, то в древе Object Explorer в списке баз данных информация о том, что база данных перешла в автономный режим, сразу не появится - нужно принудительно дать команду обновить список баз данных чтоб это изменнеие отобразилось (достаточно выделить в древе Object Explorer пункт Databases и нажать F5, или кнопку Refresh на панели инструментов).
Проблема с переводом в автономный режим может возникнуть, если к базе данных есть подключения со стороны сторонних приложений. Причем совсем не обязательно чтоб в этом подключении выполнялся какой-то запрос - может быть так что в стороннем приложении подключение не используется, но осталось висеть в пуле подключений. Этот сценарий очень вероятен если с подключением работает веб-приложение.
В этом случае диалог перевода базы в автономный режим будет висеть, пока сторонее приложение не отключится от БД (в этом случае база данных будет переведена в автономный режим), либо пока не сработает таймаут (произойдет ошибка).
Для того, чтобы перевести базу данных в автономный режим в таком случае, нужно принудительно разорвать другие подключения.
Например, это можно сделать следующим скриптом:
ALTER DATABASE [test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE [test] SET MULTI_USER
ALTER DATABASE [test] SET OFFLINE
Posted
апр 24 2008, 01:00
by
Brand