Comment forcer une base de données SQL Server 2008 à passer hors ligne

106

Comment forcer ma base de données à se mettre hors ligne, sans égard à quoi ou qui l'utilise déjà?

J'ai essayé:

ALTER DATABASE database-name SET OFFLINE;

Mais il est toujours suspendu après 7 min.

Je veux cela parce que j'ai besoin de tester le scénario.

Si c'est même possible?

radbyx
la source

Réponses:

186

Se déconnecter

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

Aller en ligne

USE master
GO
ALTER DATABASE YourDatabaseName
SET ONLINE
GO
abatishchev
la source
8
@radbyx: MSDN dit à utiliser masterlors de l'exploitation de l'état de la base de données
abatishchev
17
@radbyx: Si vous UTILISEZ MY_DATABASE, ALTER DATABASE MY_DATABASE SET OFFLINE échouera, car vous l'utilisez! Oui, je viens de me faire piquer par ça ...
TarkaDaal
10
N'a pas fonctionné pour moi: Msg 5061, niveau 16, état 1, ligne 1 ALTER DATABASE a échoué car un verrou n'a pas pu être placé sur la base de données «MyDatabase». Réessayez plus tard. Msg 5069, niveau 16, état 1, ligne 1 L'instruction ALTER DATABASE a échoué.
Andez le
6
J'ai vu des cas où vous devez toujours utiliser un `` sp_who2 active '' / `` sp_whoisactive '' pour voir des connexions tenaces à partir de machines de travail planifiées ou de trucs plus modestes et exécuter KILL avec le numéro SPID pour s'en débarrasser
Chris Wood
24

Vous devez utiliser WITH ROLLBACK IMMEDIATEpour démarrer d'autres connexions sans se soucier de quoi ou qui l'utilise déjà.

Ou utilisez WITH NO_WAITpour ne pas se bloquer et ne pas tuer les connexions existantes. Voir http://www.blackwasp.co.uk/SQLOffline.aspx pour plus de détails

Martin Smith
la source