Actuellement, ma base de données est en mode mono-utilisateur. Lorsque j'essaie de développer ma base de données, j'obtiens une erreur:
La base de données 'my_db' n'est pas accessible. (ObjectExplorer)
De plus, lorsque j'essaie de supprimer la base de données, j'obtiens l'erreur:
Impossible de modifier l'état ou les options de la base de données 'my_db' pour le moment. La base de données est en mode mono-utilisateur et un utilisateur y est actuellement connecté.
Comment sortir du mode mono-utilisateur? Je n'ai aucun utilisateur utilisant cette base de données.
Lorsque j'essaie de parcourir mon site avec IIS, l'erreur que j'obtiens est:
Une exception non gérée a été générée lors de l'exécution de la demande Web actuelle. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de pile d'exceptions ci-dessous.
J'ai l'impression que le mode mono-utilisateur est à l'origine de cela.
la source
Tout d'abord, trouvez et
KILL
tous les processus en cours d'exécution.Ensuite, exécutez ce qui suit
T-SQL
pour définir la base de données enMULTI_USER
mode.la source
Pour quitter le mode mono-utilisateur, essayez:
ALTER DATABASE [my_db] SET MULTI_USER
Pour revenir en mode mono-utilisateur, vous pouvez utiliser:
ALTER DATABASE [my_db] SET SINGLE_USER
la source
la source
J'ai essayé ça marche
la source
J'ai eu le même problème, et le session_id à tuer a été trouvé en utilisant cette requête:
la source
Appuyez sur CTRL + 1
trouvez le processus qui verrouille votre base de données. Recherchez dans la colonne dbname votre db et notez le spid. Vous devez maintenant exécuter cette instruction:
la source
Ce qui suit a fonctionné pour moi:
la source
Une autre option consiste à:
ALTER DATABASE [Your_Db] SET MULTI_USER
la source
Au cas où quelqu'un tomberait sur ce fil, voici une solution pare-balles à SQL Server coincé en MODE UTILISATEUR UNIQUE
- Obtenez l'ID de processus (spid) de la connexion que vous devez tuer
- Remplacez 'DBName' par le nom réel de la base de données
Comme alternative, vous pouvez également utiliser la commande "sp_who" pour obtenir le "spid" de la connexion ouverte:
- Ou utilisez ce SP à la place
- Exécutez ensuite ce qui suit et remplacez [spid] et [DBName] par des valeurs correctes
la source
Je ne sais pas si cela aide quelqu'un, mais j'ai eu le même problème et je n'ai pas pu trouver le processus qui me tenait. J'ai fermé SSMS et arrêté tous les services atteignant l'instance locale. Puis une fois que je suis rentré et que j'ai exécuté l'exécutable sp_who2, il m'a montré le coupable. J'ai tué le processus et j'ai réussi à faire fonctionner Multi_User, puis à redémarrer les services. Nous avons eu IIS le frapper toutes les quelques minutes / secondes à la recherche de certains packages.
la source
J'ai rencontré le même problème ce matin. Cela s'est avéré être un problème simple. J'avais une fenêtre de requête ouverte qui était définie sur la base de données mono-utilisateur dans l'explorateur d'objets. La procédure stockée sp_who2 n'a pas montré la connexion. Une fois que je l'ai fermé, j'ai pu le régler sur
la source
Ajout à la réponse Jespers , pour être encore plus efficace:
SET DEADLOCK_PRIORITY HIGH
les usagesDEADLOCK_PRIORITY
de 5.Ce qui se passe, c'est que les autres processus obtiennent une fissure dans la base de données et, si votre processus a un
DEADLOCK_PRIORITY
, il perd la course.Cela évite de trouver et de tuer l'autre spid (ce qui pourrait devoir être fait plusieurs fois).
Il est possible que vous deviez exécuter
ALTER DATABASE
plusieurs fois (mais Jesper le fait). Code modifié:la source
Utilisez ce script
Rechercher la colonne dbname et spid
maintenant exécuter
la source
Aujourd'hui, j'ai rencontré le même problème lorsque ma base de données est passée du mode multi-utilisateur au mode mono-utilisateur et cela m'a finalement empêché de publier la base de données.
Afin de résoudre ce problème, j'ai dû fermer toutes les instances de Visual Studio et exécuter la commande ci-dessous dans la fenêtre de requête Sql Server -
Cette commande a changé la base de données de mono-utilisateur à multi-utilisateur et par la suite, j'ai pu publier avec succès.
la source
Même moi, je rencontre le même problème, pas en mesure de trouver des connexions actives à my_db pour le tuer, mais montre toujours la même erreur. Je finis par déconnecter toutes les connexions SSMS possibles pour toute base de données sur le serveur, créer une nouvelle connexion à partir de SSMS et la changer en multi-utilisateur.
Remarque: cela semble être un bogue possible dans SQL Server 2005!
la source
Nous venons de vivre cela dans SQL 2012. Un processus de réplication s'est déclenché lorsque nous avons tué la session d'origine qui la définissait sur un seul utilisateur. Mais sp_who2 n'a pas montré ce nouveau processus attaché à la base de données. La fermeture de SSMS et sa réouverture nous ont ensuite permis de voir ce processus dans la base de données et nous avons ensuite pu le tuer et passer immédiatement en mode multi-utilisateurs et cela a fonctionné.
Je ne peux pas travailler sur la logique derrière cela, mais cela semble être un bogue dans SSMS et se manifeste toujours dans SQL 2012.
la source
utiliser le maître
ALLER
sélectionnez 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 = 'database name'
kill 568 - kill spid
ALTER DATABASE nom de la base de données '
SET MULTI_USER go
la source