Cómo forzar que una base de datos de SQL Server 2008 se desconecte

106

¿Cómo hago para que mi base de datos se desconecte, sin importar qué o quién ya la esté usando?

Lo intenté:

ALTER DATABASE database-name SET OFFLINE;

Pero sigue colgando después de 7 min.

Quiero esto porque necesito probar el escenario.

¿Si es posible?

radbyx
fuente

Respuestas:

186

Salir de línea

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

Ir en línea

USE master
GO
ALTER DATABASE YourDatabaseName
SET ONLINE
GO
abatishchev
fuente
8
@radbyx: MSDN dice que se use mastercuando se opera el estado de DB
abatishchev
17
@radbyx: Si usa MY_DATABASE, entonces ALTER DATABASE MY_DATABASE SET OFFLINE fallará, ¡ porque lo está usando! Sí, eso me picó ...
TarkaDaal
10
No funcionó para mí: Msg 5061, Nivel 16, Estado 1, Línea 1 ALTER DATABASE falló porque no se pudo colocar un bloqueo en la base de datos 'MyDatabase'. Inténtelo de nuevo más tarde. Msg 5069, nivel 16, estado 1, línea 1 Error en la instrucción ALTER DATABASE.
Andez
6
He visto casos en los que todavía necesita usar un 'sp_who2 active' / 'sp_whoisactive' para ver algunas conexiones obstinadas de máquinas de trabajo programadas o cosas middletier y ejecutar KILL con el número SPID para deshacerse de ellos
Chris Wood
24

Debe usar WITH ROLLBACK IMMEDIATEpara arrancar otras conexiones sin tener en cuenta qué o quién ya lo está usando.

O use WITH NO_WAITpara no colgar y no matar las conexiones existentes. Consulte http://www.blackwasp.co.uk/SQLOffline.aspx para obtener más detalles.

Martin Smith
fuente