SQL Script для использования базы данных Microsoft Sql в сети или в автономном режиме? - PullRequest
7 голосов
/ 11 мая 2009

Если я хочу перевести MS Sql 2008 в автономный режим или онлайн, мне нужно использовать графический интерфейс -> DB-Tasks-Take Online или Take Offline.

Можно ли это сделать с помощью какого-нибудь сценария sql?

Ответы [ 4 ]

11 голосов
/ 11 мая 2009
ALTER DATABASE database-name SET OFFLINE

Если вы запустите команду ALTER DATABASE , пока пользователи или процессы подключены, но вы не хотите, чтобы команда была заблокирована, вы можете выполнить инструкцию с параметром NO_WAIT. Это приводит к сбою команды с ошибкой.

ALTER DATABASE database-name SET OFFLINE WITH NO_WAIT

Соответствующий онлайн:

ALTER DATABASE database-name SET ONLINE
3 голосов
/ 14 января 2012
-- 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;

Перезагрузите сервер перед запуском процедуры. Он закроет существующие подключения к базам данных.

2 голосов
/ 11 мая 2009

Вот примечание, которое может быть очень полезным для вас: Почти всегда можно увидеть, что GUI делает TSQLwise за кулисами.

с: http://www.mssqltips.com/tip.asp?tip=1505

1 голос
/ 04 апреля 2012

Я знаю, что это старый пост, но на всякий случай кто-то сталкивался с этим решением и предпочел бы не курсорный метод, который не выполняется, но возвращает сценарии. Я только что взял предыдущее решение и преобразовал его в выборку, основанную на результатах.

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
...