SQL-скрипт для перевода базы данных Microsoft Sql в онлайн или оффлайн режим?
-
21-08-2019 - |
Вопрос
Если я хочу перевести MS Sql 2008 в автономный или сетевой режим, мне нужно использовать графический интерфейс пользователя -> DB-Tasks-Take Online или Take Offline.
Можно ли это сделать с помощью какого-нибудь sql-скрипта?
Решение
ALTER DATABASE database-name SET OFFLINE
Если вы запустите ИЗМЕНИТЬ БАЗУ ДАННЫХ команда пока пользователи или процессы подключены, но вы не хотите, чтобы команда была заблокирована, вы можете выполнить инструкцию с параметром NO_WAIT.Это приводит к сбою команды с сообщением об ошибке.
ALTER DATABASE database-name SET OFFLINE WITH NO_WAIT
Соответствующий онлайн:
ALTER DATABASE database-name SET ONLINE
Другие советы
-- Take all user databases offline
CREATE PROCEDURE SP_TakeOfflineAllDatabase AS
BEGIN
DECLARE @db sysname, @q varchar(max);
DECLARE cur_db CURSOR FOR
SELECT name FROM sys.databases WHERE owner_sid<>0x01;
OPEN cur_db;
WHILE 1=1
BEGIN
FETCH NEXT FROM cur_db INTO @db;
IF @@FETCH_STATUS <> 0
BREAK;
SET @q = N'ALTER DATABASE [' + @db + N'] SET OFFLINE WITH NO_WAIT';
EXEC(@q);
END;
CLOSE cur_db;
DEALLOCATE cur_db;
END;
Перезагрузите сервер перед запуском процедуры.Это закроет существующие подключения к базам данных.
Вот заметка, которая может быть вам очень полезна :Почти всегда можно увидеть, что графический интерфейс делает TSQLwise за кулисами.
Я знаю, что это старый пост, но на всякий случай, если кто-то наткнется на это решение и предпочтет метод без курсора, который не выполняется, но возвращает скрипты.Я только что взял предыдущее решение и преобразовал его в select, который строится на основе результатов.
DECLARE @SQL VARCHAR(8000)
SELECT @SQL=COALESCE(@SQL,'')+'ALTER DATABASE '+name+ N' SET OFFLINE WITH NO_WAIT;
'
FROM sys.databases
WHERE owner_sid<>0x01
PRINT @SQL