온라인 또는 오프라인에서 Microsoft SQL 데이터베이스를 가져 오는 SQL 스크립트?
-
21-08-2019 - |
문제
MS SQL 2008 오프라인 또는 온라인을 사용하려면 GUI-> DB-TASKS-TAKE 온라인을 사용하거나 오프라인으로 사용해야합니다.
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;
프로 시저를 실행하기 전에 서버를 다시 시작하십시오. 데이터베이스에 대한 존재하는 연결을 닫습니다.
다음은 귀하에게 매우 유용 할 수 있다는 메모입니다. GUI가 무대 뒤에서 TSQLWISE를 수행하는 것이 거의 항상 가능합니다.
나는 이것이 오래된 게시물이라는 것을 알고 있지만 누군가 가이 솔루션을 발견하고 실행되지 않고 스크립트를 반환하는 비 커서 방법을 선호하는 경우를 대비하여. 방금 이전 솔루션을 가져 와서 결과를 기반으로 빌드하는 선택으로 변환했습니다.
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
제휴하지 않습니다 StackOverflow