it-swarm.it

Come si eliminano gli utenti da un database di SQL Server 2008?

Dobbiamo eseguire un ripristino e non è possibile perché altri utenti sono connessi. Pensavamo di aver disconnesso ogni processo, ma apparentemente no.

Come possiamo, da Management Studio, dare il via a tutti gli altri in modo da poter fare questo backup?

22
Daniel Williams

Esistono due modi per farlo:

  1. Fare clic con il tasto destro sul database in Esplora oggetti andare su Attività> Stacca. Seleziona la casella di controllo Rilascia connessioni.

  2. Impostare il database in modalità utente singolo come indicato qui :

    -- 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

Uso sempre quanto segue:

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;

A volte questo può richiedere del tempo, a volte è bloccato perché sei tu quello che lo esegue e t hai una connessione attiva al database . Controlla altre finestre di query che potrebbero avere lo stesso contesto di database: questo può includere finestre di dialogo aperte, Esplora oggetti, IntelliSense, lavori di lunga durata, ecc.

Quando ho finito di fare le mie modifiche alla configurazione di quel database, semplicemente:

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

Sebbene, a volte, la cosa che devo fare per quel database richieda che il database sia online, quindi a volte devo lasciarlo in modalità utente singolo e fare questo:

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

Ora posso apportare le mie modifiche e, quando sono pronto per la connessione di altri utenti, semplicemente:

ALTER DATABASE [dbname] SET MULTI_USER;
44
Aaron Bertrand

Normalmente imposto il database in single_user e quindi aspetto il ritardo, quindi ripristino il database in multiutente come di seguito:

-- 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

Nessuna delle opzioni sopra ha funzionato per me perché il server è stato martellato da più tentativi di connessione remota.

Quando ho chiuso la porta specifica del database sul firewall di Windows, il normale Alter .. Set Multi_User ha funzionato nel primo tentativo.

1
olafk