将Microsoft Sql数据库上线或离线的SQL脚本?

8

如果我想将 MS Sql 2008 脱机或联机,我需要使用 GUI -> 数据库任务 -> 联机或脱机。

这个操作可以用一些 SQL 脚本来完成吗?

4个回答

12
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

我知道这是一个旧帖子,但是如果有人遇到这个解决方案并且更喜欢一种不使用光标的方法,该方法不会执行但会返回脚本,则可以考虑以下解决方案。 我刚刚将之前的解决方案转换为一个基于结果构建的选择器。

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

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

1
Nod Peter - 我经常使用那个按钮(来获取脚本)...一个很好的例子是当我想要更改表结构/模式时,它需要超过30秒(默认等待时间,超时错误被引发之前)..所以我需要获取更改脚本并手动运行它。 - Pure.Krome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接