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?

Vikram Bose
quelle
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
Tintenfisch
quelle
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
    
Samiey Mehdi
quelle
@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 .

Justin Woodmancy
quelle
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

Andrey Gordeev
quelle
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
t_plusplus
quelle
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

Slayernoah
quelle
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

K GANGA
quelle
0

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

Verwaltung> Lokale Dienste anzeigen

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

Chronozoen
quelle
-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
KamalDeep
quelle
Dies ist genau die gleiche Antwort wie Squid's
Reggaeguitar