Como forçar um banco de dados SQL Server 2008 a ficar offline

106

Como faço para forçar meu banco de dados a ficar offline, independentemente do que ou quem já o está usando?

Eu tentei:

ALTER DATABASE database-name SET OFFLINE;

Mas ainda está pendurado após 7 minutos.

Eu quero isso porque preciso testar o cenário.

Se é mesmo possível?

radbyx
fonte

Respostas:

186

Fique offline

USE master
GO
ALTER DATABASE YourDatabaseName
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO

Fique online

USE master
GO
ALTER DATABASE YourDatabaseName
SET ONLINE
GO
Abatishchev
fonte
8
@radbyx: MSDN diz para usar masterao operar o estado do banco de dados
abatishchev de
17
@radbyx: Se você USE MY_DATABASE, então ALTER DATABASE MY_DATABASE SET OFFLINE irá falhar, porque você está usando! Sim, acabei de ser picado por aquilo ...
TarkaDaal
10
Não funcionou para mim: mensagem 5061, Nível 16, Estado 1, Linha 1 Falha em ALTER DATABASE porque um bloqueio não pôde ser colocado no banco de dados 'MeuBancoDeDados'. Tente mais tarde. Msg 5069, nível 16, estado 1, linha 1 Instrução ALTER DATABASE falhou.
Andez
6
Já vi ocorrências em que você ainda precisa usar um 'sp_who2 active' / 'sp_whoisactive' para ver algumas conexões teimosas de máquinas de trabalho agendadas ou coisas intermediárias e executar KILL com o número SPID para se livrar delas
Chris Wood
24

Você precisa usar WITH ROLLBACK IMMEDIATEpara inicializar outras conexões sem se preocupar com o que ou quem já está usando.

Ou use WITH NO_WAITpara não travar e não matar as conexões existentes. Consulte http://www.blackwasp.co.uk/SQLOffline.aspx para obter detalhes

Martin Smith
fonte