224 votes

Faire passer la base de données du mode SINGLE USER au mode MULTI USER.

J'ai besoin d'aide pour paramétrer une base de données qui a été restaurée en SINGLE_USER pour MULTI_USER . Chaque fois que j'exécute

ALTER DATABASE BARDABARD
SET MULTI_USER;
GO

Je reçois cette erreur :

Les modifications de l'état ou des options de la base de données "BARDABARD" ne peuvent pas être effectuées pour le moment.

La base de données est en mode mono-utilisateur, et un utilisateur y est actuellement connecté.

Il doit être en non SINGLE_USER pour la mettre dans un autre mode, mais je ne peux pas mettre la base de données dans un autre mode tant qu'elle est en mode SINGLE_USER mode.

0 votes

Sur single user mode Le serveur SQL n'accepte qu'une seule connexion. Fermez donc toutes les fenêtres dans le SSMS ou tout service, application, site web utilisant votre base de données. Il est important de savoir que même si vous développez un nœud dans l'Explorateur d'objets de SSMS ou dans la fenêtre Détails de l'Explorateur d'objets, il sera traité comme une connexion.

136voto

paul Points 9867

Le message "user is currently connected to it" peut être la fenêtre de SQL Server Management Studio elle-même. Essayez de sélectionner la base de données principale et d'exécuter la commande ALTER demande à nouveau.

3 votes

Ajoutons à cela : Il semble qu'une fenêtre de requête puisse être attachée à la base de données, même si certains éléments de la base de données ne sont pas disponibles. autre (comme master ) est sélectionné dans le Bases de données disponibles de la barre d'outils lorsque la fenêtre de requête est active. Si cela continue à vous donner des maux de tête, fermez tous d'autres fenêtres d'interrogation, et sélectionner une base de données de système innocent comme master ou tempdb dans le menu déroulant de la seule fenêtre qui vous reste.

0 votes

Essayez de déconnecter la base de données et de la reconnecter dans Microsoft SQL Server Management Studio. Puis exécutez à nouveau la commande.

0 votes

Le premier commentaire est très utile et pourrait être ajouté à la réponse, en fait. Je n'ai pas pu exécuter la requête avant d'avoir fermé toutes les autres requêtes.

100voto

sgeddes Points 29837

Ce message d'erreur signifie généralement que d'autres processus sont connectés à la BD. Essayez d'exécuter ceci pour voir lesquels sont connectés :

exec sp_who

Cela vous renverra le processus et vous devriez être en mesure de l'exécuter :

kill [XXX]

Où [xxx] est le spid du processus que vous essayez de tuer.

Ensuite, vous pouvez exécuter votre déclaration ci-dessus.

Bonne chance.

0 votes

Kill [xxx] se débarrasse du processus, mais quand j'essaie d'exécuter ma commande, il revient !

3 votes

Dans mon cas, nous avions un service qui avait volé l'accès à l'utilisateur unique et il se reconnectait très rapidement. J'ai dû lancer kill <spid> avec un go immédiatement suivi par le set multi_user déclaration. Je soupçonne qu'un use [affected_db] immédiatement après serait suffisant pour voler la connexion de l'utilisateur unique, aussi.

89voto

LG1 Points 11

Vous pouvez ajouter l'option d'annuler immédiatement votre modification.

ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO

1 votes

Qu'est-ce que ROLLBACK IMMEDIATE faire exactement ?

3 votes

@dakab Force toutes les transactions en attente à effectuer un retour en arrière immédiat à partir du début de l'exécution de l'opération. ALTER DATABASE de la transaction du relevé, par opposition à WITH ROLLBACK X SECONDS qui attend que les transactions se terminent avant de les forcer à faire un retour en arrière ou à attendre indéfiniment jusqu'à ce qu'il n'y ait plus de transactions en attente (ce qui, je crois, est la valeur par défaut mais je n'arrive pas à la trouver dans la doc pour le moment). C'est l'équivalent de "arrêtez tout ce que vous êtes en train de faire en ce moment et faites ceci".

41voto

Div2504 Points 31

SQL Server 2012 :

cliquez avec le bouton droit de la souris sur le DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_user et cliquez sur OK.

Voilà !

10 votes

Pas vraiment, voici ce que j'ai reçu lorsque j'ai essayé votre solution :/ "La base de données 'XXX' est déjà ouverte et ne peut avoir qu'un seul utilisateur à la fois. (Microsoft SQL Server, Erreur : 924)"

1 votes

Confirmé en outre dans SQL 2008R2.

0 votes

Meilleure réponse, fonctionne même dans les cas où vous n'avez pas la permission d'utiliser l'instruction KILL.

25voto

Azadeh Khojandi Points 455

J'ai eu le même problème et il a été résolu par les étapes suivantes - référence : http://giladka8.blogspot.com.au/2011/11/database-is-in-single-user-mode-and.html

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 56 --=> kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X