【发布时间】:2009-05-11 07:29:22
【问题描述】:
如果我想离线或在线使用 MS Sql 2008,我需要使用 GUI -> DB-Tasks-Take Online 或 Take Offline。
这可以用一些 sql 脚本来完成吗?
【问题讨论】:
标签: sql sql-server-2008 offline
如果我想离线或在线使用 MS Sql 2008,我需要使用 GUI -> DB-Tasks-Take Online 或 Take Offline。
这可以用一些 sql 脚本来完成吗?
【问题讨论】:
标签: sql sql-server-2008 offline
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
【讨论】:
-- 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;
在运行该过程之前重新启动服务器。它将关闭与数据库的现有连接。
【讨论】:
我知道这是一篇旧帖子,但以防万一有人遇到此解决方案并且更喜欢不执行但返回脚本的非游标方法。 我刚刚采用了之前的解决方案,并将其转换为基于结果构建的选择。
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
【讨论】:
这里有一个可能对您非常有用的注释: 几乎总是可以看到 GUI 在后台执行 TSQLwise 的操作。
【讨论】: