Lors de la restauration d'une sauvegarde, comment déconnecter toutes les connexions actives?

mon serveur SQL 2005 ne restaure pas une sauvegarde à cause de connexions actives. Comment puis-je la force?

159
demandé sur Tim Rogers 2009-07-20 19:19:40

9 réponses

SQL Server Management Studio 2005

lorsque vous faites un clic droit sur une base de données et que vous cliquez sur Tasks , puis sur Detach Database , le dialogue apparaît avec les connexions actives.

écran de désactivation http://www.kodyaz.com/images/articles/kill-all-processes/detach-database.JPG

en cliquant sur l'hyperlien sous" Messages", vous pouvez désactiver les connexions actives.

Vous pouvez alors tuer ces connexions sans détacher la base de données.

plus d'information ici .

SQL Server Management Studio 2008

l'interface a changé pour SQL Server Management studio 2008, voici les étapes (via: Tim Leung )

  1. faites un clic droit sur le serveur dans L'Explorateur D'objets et sélectionnez "Moniteur D'activité".
  2. quand ceci s'ouvre, étendez le groupe de processus.
  3. utilisez maintenant la liste déroulante pour filtrer les résultats par nom de base de données.
  4. désactivez les connexions du serveur en sélectionnant l'option clic droit "tuer le processus".
170
répondu George Stocker 2017-05-23 12:02:17

vous voulez régler votre db en mode mono-utilisateur, faire la restauration, puis la remettre en mode multi-utilisateur:

ALTER DATABASE YourDB
SET SINGLE_USER WITH
ROLLBACK AFTER 60 --this will give your current connections 60 seconds to complete

--Do Actual Restore
RESTORE DATABASE YourDB
FROM DISK = 'D:\BackUp\YourBaackUpFile.bak'
WITH MOVE 'YourMDFLogicalName' TO 'D:\Data\YourMDFFile.mdf',
MOVE 'YourLDFLogicalName' TO 'D:\Data\YourLDFFile.ldf'

/*If there is no error in statement before database will be in multiuser
mode.  If error occurs please execute following command it will convert
database in multi user.*/
ALTER DATABASE YourDB SET MULTI_USER
GO

référence: Pinal Dave ( http://blog.SQLAuthority.com )

référence officielle: https://msdn.microsoft.com/en-us/library/ms345598.aspx

179
répondu brendan 2015-10-20 12:30:30

ce code a fonctionné pour moi, il tue toutes les connexions existantes d'une base de données. Tout ce que vous avez à faire est de changer la ligne Set @dbname = 'databaseName' afin qu'il ait votre nom de base de données.

Use Master
Go

Declare @dbname sysname

Set @dbname = 'databaseName'

Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = min(spid) from master.dbo.sysprocesses
        where dbid = db_id(@dbname) and spid > @spid
End

après cela j'ai pu le restaurer

38
répondu RagnaRock 2012-05-31 10:04:58

redémarrer le serveur SQL déconnectera les utilisateurs. La façon la plus facile que j'ai trouvé - bon aussi si vous voulez prendre le serveur hors ligne.

mais pour une raison très étrange, l'option "décollage hors ligne" ne fait pas cela de manière fiable et peut bloquer ou embrouiller la console de gestion. Redémarrage, puis mise hors ligne fonctionne

parfois c'est une option - si par exemple vous avez arrêté un serveur web qui est la source des connexions.

5
répondu Simon_Weaver 2010-04-11 08:02:51

essayez ceci ...

DECLARE UserCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT
    spid
FROM
    master.dbo.sysprocesses
WHERE DB_NAME(dbid) = 'dbname'--replace the dbname with your database
DECLARE @spid SMALLINT
DECLARE @SQLCommand VARCHAR(300)
OPEN UserCursor
FETCH NEXT FROM UserCursor INTO
    @spid
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQLCommand = 'KILL ' + CAST(@spid AS VARCHAR)
    EXECUTE(@SQLCommand)
    FETCH NEXT FROM UserCursor INTO
        @spid
END
CLOSE UserCursor
DEALLOCATE UserCursor
GO
4
répondu user2276214 2013-04-12 23:06:04

aucun de ceux-ci ne fonctionnait pour moi, ne pouvait pas supprimer ou déconnecter les utilisateurs actuels. Je ne voyais pas non plus de connexion active avec le DB. Redémarrer le serveur SQL (clic droit et sélectionner redémarrer) m'a permis de le faire.

2
répondu The Coder 2012-05-01 03:04:56

pour ajouter aux conseils déjà donnés, si vous avez une application web tournant à travers IIS qui utilise le DB, vous pouvez également avoir besoin de arrêter (ne pas recycler) le bassin d'application pour l'application pendant que vous restaurez, puis redémarrer. Arrêter le pool d'applications supprime les connexions http actives et ne permet plus rien, ce qui pourrait permettre de déclencher des processus qui se connectent et donc verrouillent la base de données. C'est un problème connu par exemple avec la gestion de contenu Umbraco Système lors de la restauration de sa base de données

2
répondu Chris Halcrow 2013-07-31 00:30:05

j'ai couru à travers ce problème en automatisant un processus de restauration dans SQL Server 2008. Mon (réussie) approche était un mélange de deux des réponses fournies.

tout d'abord, je cours à travers toutes les connexions de ladite base de données, et les tuer.

DECLARE @SPID int = (SELECT TOP 1 SPID FROM sys.sysprocess WHERE dbid = db_id('dbName'))
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = top 1 spid from master.dbo.sysprocesses
        where dbid = db_id('dbName')
End

ensuite, j'ai paramétré la base de données en mode mono-utilisateur

ALTER DATABASE dbName SET SINGLE_USER

ensuite, je lance la restauration...

RESTORE DATABASE and whatnot

tuer à nouveau les connexions

(same query as above)

et renvoie la base de données à multi_user.

ALTER DATABASE dbName SET MULTI_USER

de cette façon, je m'assure qu'il n'y a pas de connexion bloquant la base de données avant de mettre en mode simple, puisque la première va geler s'il y en a.

2
répondu Eric Wu 2016-10-05 18:40:57

rien de ce qui précède n'a fonctionné pour moi. Ma base de données ne montrait aucune connexion active utilisant Activity Monitor ou sp_who. J'ai finalement dû:

  • clic droit sur le noeud de la base de données
  • Select "De La Détacher..."
  • cochez la case "Drop Connections
  • Rattacher

pas la solution la plus élégante mais il fonctionne et il ne nécessite pas redémarrer SQL Server (pas un option pour moi, puisque le serveur de base de données hébergé un tas d'autres bases de données)

1
répondu Brent Waggoner 2016-01-27 03:48:40