webentwicklung-frage-antwort-db.com.de

Setzen Sie die Datenbank von SINGLE USER auf MULTI USER

Ich brauche Hilfe beim Einrichten einer Datenbank, die im SINGLE_USER-Modus wiederhergestellt wurde, auf MULTI_USER. Jedes Mal, wenn ich renne

ALTER DATABASE BARDABARD
SET MULTI_USER;
GO

Ich erhalte diesen Fehler: 

Änderungen am Status oder an den Optionen der Datenbank 'BARDABARD' können derzeit nicht vorgenommen werden. 

Die Datenbank befindet sich im Einzelbenutzermodus, und derzeit ist ein Benutzer mit der Datenbank verbunden.

Es muss sich im Nicht-SINGLE_USER-Modus befinden, um einen anderen Modus festzulegen, aber ich kann die Datenbank nicht in einen anderen Modus setzen, während es sich im SINGLE_USER-Modus befindet.

154
Rahna1970418

Der "Benutzer ist derzeit mit ihm verbunden" ist möglicherweise das SQL Server Management Studio-Fenster. Versuchen Sie, die Master-Datenbank auszuwählen und die Abfrage ALTER erneut auszuführen.

97
paul

Diese Fehlermeldung bedeutet im Allgemeinen, dass andere Prozesse mit der DB verbunden sind. Versuchen Sie, dies auszuführen, um zu sehen, welche verbunden sind:

exec sp_who

Das wird Ihnen den Prozess zurückgeben und dann sollten Sie ausführen können:

kill [XXX]

Wobei [xxx] das spid des Prozesses ist, den Sie beenden möchten.

Dann können Sie Ihre obige Anweisung ausführen. 

Viel Glück.

77
sgeddes

Sie können die Option hinzufügen, um Ihre Änderung sofort rückgängig zu machen.

ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO
56
LG1

SQL Server 2012:

klicken Sie mit der rechten Maustaste auf den DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_user und klicken Sie auf OK.

Voila! 

34
Div2504

Ich hatte das gleiche Problem und es wurde durch die folgenden Schritte behoben - Referenz: 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

Das hat gut für mich funktioniert.

Schritt 1. Klicken Sie mit der rechten Maustaste auf die Datenbank-Engine, klicken Sie auf Aktivitätsmonitor und sehen Sie, welcher Prozess eine Verbindung hat. Töten Sie den betreffenden Benutzer und führen Sie die Abfrage sofort aus.

Schritt 2.

USE [master];
GO
ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT;
GO  

und aktualisieren Sie die Datenbank.

11
sunil guragol

Ich hatte tatsächlich ein Problem, bei dem meine Datenbank durch die Prozesse ziemlich blockiert war und eine Racebedingung mit ihnen war. Als ich einen Befehl ausgeführt hatte, der aktualisiert wurde, wurde er erneut gesperrt. Ich musste die folgenden Befehle nacheinander ausführen in SSMS und habe mich offline gesetzt und von dort aus habe ich meine Wiederherstellung durchgeführt und bin online wiedergekommen, die beiden Abfragen waren:

Zuerst lief:

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

Dann sofort danach (im zweiten Abfragefenster):

USE master ALTER DATABASE <yourDbName> SET OFFLINE WITH ROLLBACK IMMEDIATE

Habe getan, was ich brauchte, und es dann wieder online gestellt. Vielen Dank an alle, die diese Stücke geschrieben haben, damit ich mein Problem kombinieren und lösen kann.

8
Shane G.

Am besten melden Sie sich direkt am Server an, anstatt SQL Management Studio zu verwenden

Stellen Sie sicher, dass das Konto, unter dem Sie sich anmelden, Dbowner für die Datenbank ist, die Sie auf MULTI_USER festlegen möchten. Melden Sie sich als sa (mit SQL Server-Authentifizierung) an, wenn Sie können

Wenn Ihre Datenbank von IIS verwendet wird, stoppen Sie die Website und den App-Pool, der sie verwendet. Dies kann der Prozess sein, der verbunden ist und Sie daran hindert, auf MULTI_USER zu setzen

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

Verweisen Sie hier, wenn Sie immer noch Probleme haben:

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

ALS LETZTE ALTERNATIVE - Wenn Sie alles versucht haben und verzweifelt werden, können Sie die SQL Server-Instanz stoppen und erneut starten

4
Chris Halcrow

Der folgende Code hat für mich funktioniert, als ich die spezifische SPID nicht kannte, mit der in den singleuser-Modus gewechselt wurde.

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. Versuchte alles hat nicht funktioniert
  2. Melden Sie sich remote an diesem Server an, da alle Verbindungen abgebrochen werden 
  3. führen Sie den folgenden Code mehr als einmal aus, bis der Vorgang abgeschlossen ist und kein Test mehr durchgeführt wird
  4. reaktivieren Sie es erneut, indem Sie den Code unter dem folgenden Code verwenden 

verwende master GO deklariere @sql als varchar (20), @spid als int

wählen Sie @spid = min (spid) von master..sysprocesses aus, wobei dbid = db_id ('DB_NAME') und spid! = @@ spid 

while (@spid ist nicht null) begin 'Killprozess' drucken + cast (@spid as varchar) + '...' set @sql = 'kill' + cast (@spid als varchar) exec (@sql)

select 
    @spid = min(spid)  
from 
    master..sysprocesses  
where 
    dbid = db_id('DB_NAME') 
    and spid != @@spid end

dann, um es lebend zurückzubringen 

ALTER DATABASE DB_NAME SET MULTI_USER; GEHEN

1
Bishoy Hanna

Wenn dies nicht funktioniert, suchen Sie den Anmeldenamen des Spid und deaktivieren Sie ihn in Security - Logins

1
Aileen Gregg

Das hat gut für mich funktioniert

  1. Machen Sie eine Sicherung
  2. Erstellen Sie eine neue Datenbank und stellen Sie die Sicherung wieder her
  3. Dann Eigenschaften> Optionen> [Abwärts rollen] Status> RestrictAccess> wählen Sie Multi_user aus und klicken Sie auf OK
  4. Löschen Sie die alte Datenbank

Hoffe diese Arbeit für alle Danke Ramesh Kumar

1
Ramesh Kumar

Ich habe das Problem leicht gelöst

  1. Klicken Sie mit der rechten Maustaste auf den Datenbanknamen und benennen Sie ihn um

  2. Klicken Sie nach dem Ändern mit der rechten Maustaste auf den Datenbanknamen -> Eigenschaften -> Optionen ->, um zum Ende des RestrictAccess-Bildlaufs zu gelangen (SINGLE_USER bis MULTI_USER).

  3. Jetzt können Sie die Datenbank wieder in Ihren alten Namen umbenennen.

0
Vamsi

Bei mehr als drei Gelegenheiten in SQL Server 2014 habe ich eine Datenbank in den Einzelbenutzermodus konvertieren lassen, ohne dass ich etwas daran geändert habe. Es muss irgendwie während der Datenbankerstellung aufgetreten sein. Alle oben genannten Methoden funktionierten nie, da ich immer den Fehler erhielt, dass die Datenbank im Einzelbenutzermodus war und keine Verbindung hergestellt werden konnte. 

Das einzige, was ich zur Arbeit bekam, war den SQL Server Windows Service neu zu starten. Dadurch konnte ich mich mit der Datenbank verbinden und die erforderlichen Änderungen vornehmen oder die Datenbank löschen und neu beginnen.

0
epak96

Gehen Sie einfach zu den Datenbankeigenschaften und ändern Sie den SINGLE USER-Modus in MULTI USER

 enter image description here

HINWEIS: Wenn es für Sie nicht funktioniert, nehmen Sie die Db-Sicherung wieder ein und stellen Sie sie wieder her. Führen Sie dann die obige Methode erneut aus

* Single = SINGLE_USER

Multiple = MULTI_USER

Eingeschränkt = RESTRICTED_USER

0
Hassan Saeed

Ich hatte Probleme mit einer lokalen Datenbank.

Ich konnte dieses Problem lösen, indem ich SQL Server anhielt und dann SQL Server startete und dann die SSMS-Benutzeroberfläche verwendete, um die DB-Eigenschaften in Multi_User zu ändern.

Die DB ging in den "Einzelbenutzer" -Modus, als ich versuchte, eine Sicherung wiederherzustellen. Ich habe vor dem Wiederherstellungsversuch keine Sicherung der Zieldatenbank erstellt (SQL 2017). Dies wird Sie jedes Mal bekommen.

Beenden Sie SQL Server, starten Sie SQL Server, führen Sie die obigen Skripts aus oder verwenden Sie die Benutzeroberfläche.

0
hanzolo

Nach dem Wechsel in den Einzelbenutzermodus kann ein Client nur EINE Verbindung mit dem SQL Server herstellen. Denken Sie daran, dass "Object Explorer" eine (separate) Verbindung benötigt. Wenn Sie also versuchen, eine Mehrbenutzeranweisung in einer Abfrage auszuführen In diesem Fenster erhalten Sie die Fehlermeldung, dass Sie im Einzelbenutzermodus keine weitere Verbindung herstellen können.

Für mich war dies jedoch nicht das Problem. In meinem Fall gab es wenige automatisierte Prozesse, die beharrlich waren (in Sekundenschnelle), um Verbindungen herzustellen. Sobald ich also die DB in den Einzelbenutzermodus brachte und mich selbst abschaltete, eine von Die Prozesse haben die Verbindung hergestellt/belegt (bevor ich mit dem Wiederherstellungsvorgang beginnen konnte). Sobald ich diese Verbindungen abgebrochen habe - sie würden sich wieder verbinden und wenn ich den Wiederherstellungsbefehl ausführte, würde ich den Fehler bekommen, dass die Verbindung bereits belegt ist.

Um dieses Problem zu lösen, musste ich die kill-Anweisungen schreiben, User-Mode-Anweisungen und Restore-Operationen in einem Abfragefenster ändern und wenn ich sie alle auf einmal durchführte, voila !!! es funktionierte.

Hoffe das hilft anderen.

0
Eddie Kumar