it-swarm-eu.dev

Wie können Sie Benutzer aus einer SQL Server 2008-Datenbank entfernen?

Wir müssen eine Wiederherstellung durchführen und können dies nicht, da andere Benutzer verbunden sind. Wir dachten, wir hätten jeden Prozess unterbrochen, aber anscheinend nicht.

Wie können wir von Management Studio aus alle anderen starten, damit wir diese Sicherung durchführen können?

22
Daniel Williams

Es gibt zwei Möglichkeiten:

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Datenbank und gehen Sie zu Aufgaben> Trennen. Aktivieren Sie das Kontrollkästchen Verbindungen trennen.

  2. Stellen Sie die Datenbank auf den Einzelbenutzermodus wie hier beschrieben :

    -- hit Ctrl+Shift+M in SSMS to fill in the template parameter
    USE master;
    GO
    
    ALTER DATABASE N'<Database Name, sysname,>'
    SET SINGLE_USER
    WITH ROLLBACK IMMEDIATE;
    GO
    
    ALTER DATABASE N'<Database Name, sysname,>'
    SET READ_ONLY;
    GO
    
    ALTER DATABASE N'<Database Name, sysname,>'
    SET MULTI_USER;
    GO
    
25
Wil

Ich benutze immer folgendes:

USE master; -- get out of dbname myself
GO
-- kick all other users out:
ALTER DATABASE [dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- prevent sessions from re-establishing connection:
ALTER DATABASE [dbname] SET OFFLINE;

Manchmal kann dies eine Weile dauern, und manchmal wird es blockiert, weil Sie es ausführen und Sie eine aktive Verbindung zur Datenbank haben . Suchen Sie nach anderen Abfragefenstern, die möglicherweise denselben Datenbankkontext haben. Dies kann geöffnete Dialogfelder, Objekt-Explorer, IntelliSense, Jobs mit langer Laufzeit usw. umfassen.

Wenn ich mit den Änderungen an der Konfiguration dieser Datenbank fertig bin, gehe ich einfach so vor:

ALTER DATABASE [dbname] SET ONLINE;
ALTER DATABASE [dbname] SET MULTI_USER;

Manchmal muss die Datenbank online sein, was ich für diese Datenbank tun muss. Manchmal muss ich sie im Einzelbenutzermodus belassen und Folgendes tun:

ALTER DATABASE [dbname] SET ONLINE;
GO
USE [dbname];

Jetzt kann ich meine Änderungen vornehmen und wenn ich bereit bin, dass andere Benutzer eine Verbindung herstellen, einfach:

ALTER DATABASE [dbname] SET MULTI_USER;
44
Aaron Bertrand

Normalerweise setze ich die Datenbank in single_user und warte dann auf die Verzögerung und setze die Datenbank dann wie folgt wieder in multiuser zurück:

-- to kill all connections for particular db ... otherwise the restore will fail as exclusive lock cannot be obtained for the db being restored.

    alter database db_name
    set single_user with rollback immediate
    waitfor delay '00:00:05'  -- wait for 5 secs
    alter database db_name
    set multi_user
    restore database db_name from disk = 'D:\restore\db_name.bak'
    with replace, stats = 10, recovery -- if you want to recover your database online
    -- optional if you dont have the same directory/file structure
    move 'datafile logical name' to 'E:\data\physical_name.mdf',
    move 'logfile logical name' to 'F:\log\physical_name_log.ldf'
2
Kin Shah

Keine der oben genannten Optionen hat bei mir funktioniert, da der Server durch mehrere Remoteverbindungsversuche beeinträchtigt wurde.

Als ich den spezifischen Datenbankport auf der Windows-Firewall schloss, funktionierte der normale Alter .. Set Multi_User beim ersten Versuch.

1
olafk