web-dev-qa-db-fra.com

Comment exclure des utilisateurs d'une base de données SQL Server 2008?

Nous devons effectuer une restauration et nous ne pouvons pas le faire car d'autres utilisateurs sont connectés. Nous pensions avoir déconnecté chaque processus, mais apparemment pas.

Comment pouvons-nous, à partir de Management Studio, lancer tout le monde pour que nous puissions faire cette sauvegarde?

22
Daniel Williams

Il y a deux façons de procéder:

  1. Cliquez avec le bouton droit sur la base de données dans l'Explorateur d'objets, accédez à Tâches> Détacher. Cochez la case Supprimer les connexions.

  2. Réglez la base de données en mode mono-utilisateur comme indiqué ici :

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

J'utilise toujours ce qui suit:

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;

Parfois, cela peut prendre un certain temps, et parfois il est bloqué parce que c'est vous qui l'exécutez, et vous avez une connexion active à la base de données . Recherchez d'autres fenêtres de requête pouvant avoir le même contexte de base de données - cela peut inclure des boîtes de dialogue ouvertes, l'Explorateur d'objets, IntelliSense, des travaux de longue durée, etc.

Quand j'ai fini d'apporter mes modifications à la configuration de cette base de données, j'ai simplement:

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

Bien que, parfois, la chose que je dois faire pour cette base de données nécessite que la base de données soit en ligne, donc parfois je dois la laisser en mode mono-utilisateur et faire ceci:

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

Maintenant, je peux apporter mes modifications, puis lorsque je suis prêt à connecter d'autres utilisateurs, simplement:

ALTER DATABASE [dbname] SET MULTI_USER;
44
Aaron Bertrand

Je règle normalement la base de données dans single_user, puis j'attends le délai, puis je remets la base de données en multi-utilisateur comme ci-dessous:

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

Aucune des options ci-dessus n'a fonctionné pour moi car le serveur a été martelé par plusieurs tentatives de connexion à distance.

Lorsque j'ai fermé le port de base de données spécifique sur le pare-feu Windows, la fonction normale Alter .. Set Multi_User a fonctionné lors de la première tentative.

1
olafk