Fehler beim Umbenennen der Datenbank in SQL Server 2008 R2


163

Ich verwende diese Abfrage, um die Datenbank umzubenennen:

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

Aber es zeigt einen Fehler beim Ausführen:

Meldung 5030, Ebene 16, Status 2, Zeile 1
Die Datenbank konnte nicht ausschließlich für die Ausführung des Vorgangs gesperrt werden.

Stimmt etwas mit meiner Anfrage nicht?


4
An der Abfrage ist nichts auszusetzen. Der Fehler weist darauf hin, dass andere Verbindungen mit der Datenbank verbunden sind, sodass Sie sie derzeit nicht umbenennen dürfen.
Damien_The_Unbeliever

1
Wenn Sie dies über SSMS tun, stellen Sie sicher, dass für diese Datenbank kein Abfragefenster geöffnet ist, da dies eine separate Verbindung ist, die die Datenbank sperrt.
Jleach

Antworten:


328

Sie können versuchen, die Datenbank auf den Einzelbenutzermodus einzustellen.

https://stackoverflow.com/a/11624/2408095

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE    
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

1
ist WITH ROLLBACK IMMEDIATEnotwendig. Wenn ich es überhaupt nicht benutze, wird es Probleme verursachen?
user13892

Etwas spät zur Party, aber um diese Frage zu beantworten: Ja, Sie sollten WITH ROLLBACK IMMEDIATEbeim Ändern einer Datenbank, mit der andere Benutzer möglicherweise arbeiten, diese verwenden, um die Integrität dieser Vorgänge sicherzustellen. Dies ist jedoch nicht unbedingt erforderlich, wenn die Datenbank wieder in den MULTI_USER-Modus versetzt wird, da sich die Datenbank bereits im SINGLE_USER-Modus befindet und Sie der einzige Benutzer sind, der ohnehin Transaktionen ausführen kann.
Hakan Yildizhan

61
  1. Stellen Sie die Datenbank auf Einzelmodus ein:

    ALTER DATABASE dbName
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    
  2. Versuchen Sie, die Datenbank umzubenennen:

    ALTER DATABASE dbName MODIFY NAME = NewName
  3. Stellen Sie die Datenbank auf den Mehrbenutzermodus ein:

    ALTER DATABASE NewName
    SET MULTI_USER WITH ROLLBACK IMMEDIATE
    

@SamieyMehdi Soll ich WITH ROLLBACk IMMEDIATEfür Mehrbenutzer verwenden?
BendEg

29

In SQL Server Management Studio (SSMS) :

Sie können auch im Objekt-Explorer mit der rechten Maustaste auf Ihre Datenbank klicken und zu Eigenschaften wechseln . Gehen Sie von dort zu Optionen . Scrollen Sie ganz nach unten und setzen Sie Restrict Access auf SINGLE_USER . Ändern Sie Ihren Datenbanknamen, gehen Sie zurück und setzen Sie ihn wieder auf MULTI_USER .


Schnell und einfach!
Ani627

Das ist perfekt. Arbeiten mit SQL Server 2017
Adam Macierzyński

19

Versuchen Sie zuerst, alle Verbindungen zu Ihrer Datenbank zu schließen:

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

Von hier genommen


4

Das hat es für mich getan:

USE [master];
GO
ALTER DATABASE [OldDataBaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
EXEC sp_renamedb N'OldDataBaseName', N'NewDataBaseName';


-- Add users again
ALTER DATABASE [NewDataBaseName] SET MULTI_USER
GO


2

Ändern Sie die Datenbank in den Einzelbenutzermodus, wie in den anderen Antworten gezeigt

Manchmal wird auch nach der Konvertierung in den Einzelbenutzermodus die einzige zulässige Verbindung zur Datenbank verwendet.

Versuchen Sie Folgendes, um eine Verbindung auch nach der Konvertierung in den Einzelbenutzermodus zu schließen:

select * from master.sys.sysprocesses
where spid>50 -- don't want system sessions
  and dbid = DB_ID('BOSEVIKRAM')

Sehen Sie sich die Ergebnisse an und sehen Sie die ID der Verbindung zur betreffenden Datenbank.

Verwenden Sie dann den folgenden Befehl, um diese Verbindung zu schließen (es sollte nur eine geben, da sich die Datenbank jetzt im Einzelbenutzermodus befindet).

KILL connection_ID

Ersetzen Sie connection_id durch die ID in den Ergebnissen der ersten Abfrage


1

1.Datenbank stellt den 1. Einzelbenutzermodus ein

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER MIT ROLLBACK IMMEDIATE

2. BENENNEN SIE DIE DATENBANK UM

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

3.DATABAE SET MULIUSER MODE

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER WITH ROLLBACK IMMEDIATE


0

Eine andere Möglichkeit, alle Verbindungen zu schließen:

Verwaltung> Lokale Dienste anzeigen

Beenden / Starten Sie den Dienst "SQL Server (MSSQLSERVER)"


-1
use master

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE  

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

Dies ist genau die gleiche Antwort wie Squid's
Reggaeguitar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.