web-dev-qa-db-fra.com

Définir la base de données du mode UTILISATEUR SIMPLE sur MULTI UTILISATEUR

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.

154
Rahna1970418

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

97
paul

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.

77
sgeddes

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

ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO
56
LG1

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! 

34
Div2504

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
18
Azadeh Khojandi

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.

11
sunil guragol

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.

8
Shane G.

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:

http://www.sqlservercentral.com/blogs/pearlknows/2014/04/07/help-i-m-stuck-in-single-user-mode-and-can-t-get-out/

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.

4
Chris Halcrow

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
2
Jaypal Reddy
  1. Essayé tout n'a pas fonctionné
  2. Connectez-vous à ce serveur à distance car nous allons tuer toutes les connexions 
  3. lancez le code ci-dessous plus d'une fois jusqu'à ce qu'il revienne terminé et plus aucun test de "processus de mise à mort"
  4. le réactiver à nouveau en utilisant le code ci-dessous le code ci-dessous 

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

1
Bishoy Hanna

Si ce qui précède ne fonctionne pas, trouvez le nom de connexion du spid et désactivez-le dans Sécurité - Connexions

1
Aileen Gregg

CA marchait bien pour moi

  1. Faire une sauvegarde
  2. Créer une nouvelle base de données et restaurer la sauvegarde
  3. Puis Propriétés> Options> [Défilement vers le bas] État> RestrictAccess> sélectionnez Multi_user et cliquez sur OK.
  4. Supprimer l'ancienne base de données

J'espère que cela fonctionnera pour tous Merci Ramesh Kumar

1
Ramesh Kumar

J'ai résolu le problème facilement

  1. Faites un clic droit sur le nom de la base de données et renommez-le

  2. 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).

  3. Maintenant, encore une fois, vous pouvez renommer la base de données sous votre ancien nom.

0
Vamsi

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

0
epak96

allez simplement dans les propriétés de la base de données

 enter image description here

REMARQUE:

* Single = SINGLE_USER

Multiple = MULTI_USER

Restreint = RESTRICTED_USER

0
Hassan Saeed

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.

0
hanzolo

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.

0
Eddie Kumar