J'ai besoin d'aide pour configurer une base de données restaurée en mode SINGLE_USER
sur MULTI_USER
. Chaque fois que je cours
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 mode non -SINGLE_USER
pour le définir dans un autre mode, mais je ne peux pas définir la base de données dans un autre mode tant qu’il est en mode SINGLE_USER
.
«L’utilisateur est actuellement connecté» peut être la fenêtre SQL Server Management Studio elle-même. Essayez de sélectionner la base de données master et d’exécuter à nouveau la requête ALTER
.
Ce message d'erreur signifie généralement que d'autres processus sont connectés à la base de données. Essayez de lancer ceci pour voir lesquels sont connectés:
exec sp_who
Cela vous retournera le processus et vous devriez alors pouvoir exécuter:
kill [XXX]
Où [xxx] est la spid
du processus que vous essayez de tuer.
Ensuite, vous pouvez exécuter votre déclaration ci-dessus.
Bonne chance.
Vous pouvez ajouter l'option permettant d'annuler votre modification immédiatement.
ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO
SQL Server 2012:
cliquez avec le bouton droit sur le DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_user
et cliquez sur OK.
Voila!
J'ai eu le même problème et 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
CA marchait bien pour moi.
Étape 1. Cliquez avec le bouton droit sur le moteur de base de données, cliquez sur le moniteur d'activité et voyez quel processus a une connexion. Tuez cet utilisateur particulier et exécutez la requête immédiatement.
Étape 2.
USE [master];
GO
ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT;
GO
et actualisez la base de données.
En fait, j’ai eu un problème où ma base de données était à peu près verrouillée par les processus et une situation critique pour eux. Au moment où une commande a été exécutée, elle a été verrouillée à nouveau. dans SSMS et m’a déconnecté et à partir de là, j’ai fait ma restauration et je suis bien revenu en ligne, les deux requêtes où:
Premier couru:
USE master
GO
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses
WHERE dbid = db_id('<yourDbName>')
EXEC(@kill);
Puis tout de suite après (dans la deuxième fenêtre de requête):
USE master ALTER DATABASE <yourDbName> SET OFFLINE WITH ROLLBACK IMMEDIATE
A fait ce dont j'avais besoin, puis l'a ramené en ligne. Merci à tous ceux qui ont écrit ces textes pour que je puisse combiner et résoudre mon problème.
Il peut être préférable de vous connecter directement au serveur plutôt que d'utiliser SQL Management Studio.
Assurez-vous que le compte auquel vous vous connectez est dbowner pour la base de données que vous souhaitez définir sur MULTI_USER. Connectez-vous en tant que sa (en utilisant l'authentification SQL Server) si vous le pouvez.
Si votre base de données est utilisée par IIS, arrêtez le site Web et le pool d'applications qui l'utilisent - il peut s'agir du processus qui vous connecte et vous empêche de passer à MULTI_USER.
USE MASTER
GO
-- see if any process are using *your* database specifically
SELECT * from master.sys.sysprocesses
WHERE spid > 50 -- process spids < 50 are reserved by SQL - we're not interested in these
AND dbid=DB_ID ('YourDbNameHere')
-- if so, kill the process:
KILL n -- where 'n' is the 'spid' of the connected process as identified using query above
-- setting database to read only isn't generally necessary, but may help:
ALTER DATABASE YourDbNameHere
SET READ_ONLY;
GO
-- should work now:
ALTER DATABASE Appswiz SET MULTI_USER WITH ROLLBACK IMMEDIATE
Reportez-vous ici si vous avez toujours des problèmes:
COMME DERNIERE ALTERNATIVE - Si vous avez essayé toutes les solutions ci-dessus et que vous commencez à désespérer, vous pouvez essayer d'arrêter l'instance du serveur SQL et de la redémarrer.
Le code ci-dessous a fonctionné pour moi lorsque je ne connaissais pas le SPID spécifique utilisé pour passer en mode singleuser
.
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 52 -- kill the number in spid field
GO
exec sp_dboption 'dbname', 'single user', 'FALSE'
GO
utiliser le maître GO déclarer @sql en tant que varchar (20), @spid en tant qu'int
sélectionnez @spid = min (spid) dans master..sysprocesses où dbid = db_id ('DB_NAME') et spid! = @ @ spid
tandis que (@spid n'est pas nul) commence print 'Killing process' + cast (@spid as varchar) + '...' set @sql = 'kill' + cast (@spid en tant que varchar) exec (@sql)
select @spid = min(spid) from master..sysprocesses where dbid = db_id('DB_NAME') and spid != @@spid end
puis le ramener vivant
ALTER DATABASE DB_NAME SET MULTI_USER; ALLER
Si ce qui précède ne fonctionne pas, trouvez le nom de connexion du spid et désactivez-le dans Sécurité - Connexions
CA marchait bien pour moi
J'espère que cela fonctionnera pour tous Merci Ramesh Kumar
J'ai résolu le problème facilement
Faites un clic droit sur le nom de la base de données et renommez-le
Après modification, cliquez avec le bouton droit sur le nom de la base de données -> propriétés -> options -> aller au bas du défilement RestrictAccess (SINGLE_USER à MULTI_USER).
Maintenant, encore une fois, vous pouvez renommer la base de données sous votre ancien nom.
À plus de 3 reprises, travaillant avec SQL Server 2014, une base de données a été convertie en mode mono-utilisateur sans que rien ne soit changé. Cela doit avoir eu lieu lors de la création de la base de données. Toutes les méthodes ci-dessus n'ont jamais fonctionné car j'ai toujours reçu une erreur indiquant que la base de données était en mode utilisateur unique et ne pouvait pas être connectée.
La seule chose que j'ai pu travailler a été de redémarrer le service Windows de SQL Server. Cela m'a permis de me connecter à la base de données et d'apporter les modifications nécessaires ou de supprimer la base de données et de recommencer.
J'avais des problèmes avec une base de données locale.
J'ai pu résoudre ce problème en arrêtant le serveur SQL, puis en le démarrant, puis en utilisant l'interface utilisateur SSMS pour modifier les propriétés de la base de données en Multi_User.
La base de données est passée en mode "Utilisateur unique" lorsque je tentais de restaurer une sauvegarde. Je n'avais pas créé de sauvegarde de la base de données cible avant de tenter de restaurer (SQL 2017). cela t'aura à chaque fois.
Arrêtez SQL Server, démarrez SQL Server, puis exécutez les scripts ci-dessus ou utilisez l'interface utilisateur.
Après être entré dans le mode mono-utilisateur, un client ne peut établir qu’UNE SEULE connexion avec SQL Server. N'oubliez pas que "l'explorateur d'objets" utilise une connexion (séparée). Par conséquent, si vous essayez d'exécuter une instruction multi-utilisateur dans une requête Dans cette fenêtre, vous aurez l’erreur de ne pas pouvoir établir une autre connexion en mode mono-utilisateur.
Pour moi, ce n’était pas le problème cependant, dans mon cas, il y avait peu de processus automatisés qui établissaient des connexions de manière persistante (toutes les quelques secondes), aussi, dès que j’ai mis la base de données en mode mono-utilisateur et que les processus établis/occupés la connexion (avant que je puisse commencer mon opération de restauration). Dès que je tuerais ces connexions, elles se reconnecteraient et lorsque j'exécuterais la commande Restore, j'obtiendrais l'erreur que la connexion était déjà occupée.
Pour résoudre ce problème, je devais écrire les instructions kill
, le changement des instructions User-Mode
et les opérations Restore
dans une seule fenêtre de requête. Lorsque je les ai toutes exécutées simultanément, le tour est joué !!! ça a marché.
J'espère que cela aide les autres.