DROP DATABASE (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Entfernt eine oder mehrere Benutzerdatenbanken oder Datenbankmomentaufnahmen aus einer Instanz des SQL Server-Datenbank-Engine.
Transact-SQL-Syntaxkonventionen
Syntax
SQL Server-Syntax.
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ]
[ ; ]
Azure SQL-Datenbank- und Azure Synapse Analytics- und Analytics Platform-Systemsyntax.
DROP DATABASE database_name
[ ; ]
Argumente
IF EXISTS
Gilt für: SQL Server 2016 (13.x) und höhere Versionen
Löscht die Datenbank nur, wenn diese bereits vorhanden ist.
database_name
Gibt den Namen der zu entfernenden Datenbank an. Zum Anzeigen einer Liste von Datenbanken verwenden Sie die sys.databases-Katalogsicht.
database_snapshot_name
Gibt den Namen der zu entfernenden Datenbankmomentaufnahme an.
Hinweise
Eine Datenbank kann unabhängig von ihrem Status (offline, schreibgeschützt, fehlerverdächtig usw.) gelöscht werden. Verwenden Sie die sys.databases
Katalogansicht, um den aktuellen Status einer Datenbank anzuzeigen.
Eine gelöschte Datenbank kann nur neu erstellt werden, indem eine Sicherungskopie wiederhergestellt wird. Datenbankmomentaufnahmen können nicht gesichert werden und können daher nicht wiederhergestellt werden.
Vor dem Löschen einer Datenbank sollte die Masterdatenbank gesichert werden.
Beim Löschen einer Datenbank wird die Datenbank von der SQL Server-Instanz entfernt, und die von der Datenbank verwendeten physischen Datenträgerdateien werden gelöscht. Wenn die Datenbank oder eine der zugehörigen Dateien offline ist, werden die Datenträgerdateien nicht gelöscht. Diese Dateien können manuell mithilfe eines Datei-Managers wie Explorer gelöscht werden. Verwenden Sie sp_detach_db, um eine Datenbank vom aktuellen Server zu entfernen, ohne dass die Dateien aus dem Dateisystem gelöscht werden.
Warnung
In SQL Server 2016 (13.x) und späteren Versionen wird das Ablegen einer Datenbank, die Sicherungen enthält, FILE_SNAPSHOT
die ihm zugeordnet sind, erfolgreich ausgeführt, aber die Datenbankdateien, die Momentaufnahmen zugeordnet haben, werden nicht gelöscht, um zu vermeiden, dass die Sicherungen, die auf diese Datenbankdateien verweisen, ungültig werden. Die Datei wird abgeschnitten, aber nicht physisch gelöscht, um die FILE_SNAPSHOT
Sicherungen intakt zu halten. Weitere Informationen finden Sie unter SQL Server-Sicherung und -Wiederherstellung mit Azure Blob Storage.
SQL Server
Wenn Sie eine Datenbankmomentaufnahme ablegen, wird die Datenbankmomentaufnahme aus einer Instanz von SQL Server gelöscht und die physischen NTFS-Dateisystemdateien gelöscht, die von der Momentaufnahme verwendet werden. Informationen zur Verwendung von spärlichen Dateien nach Datenbankmomentaufnahmen finden Sie unter Datenbankmomentaufnahmen (SQL Server).For information about using sparse files by database snapshots, see Database snapshots (SQL Server) Wenn Sie eine Datenbankmomentaufnahme ablegen, werden Einträge im Plancache gelöscht, der der Datenbankmomentaufnahme zugeordnet ist, nicht die gesamte Instanz. Durch das Löschen des Plancaches wird eine Neukompilierung aller nachfolgenden Ausführungspläne verursacht, und möglicherweise entsteht plötzlich eine temporäre Verringerung der Abfrageleistung.
Für jeden gelöschten Cachespeicher im Plancache enthält das SQL Server-Fehlerprotokoll die folgende Informationsmeldung. Diese Meldung wird alle fünf Minuten protokolliert, solange der Cache innerhalb dieses Zeitintervalls geleert wird.
SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.
Interoperabilität
SQL Server
Zum Löschen einer für die Transaktionsreplikation oder die Mergereplikation veröffentlichten Datenbank bzw. einer von der Mergereplikation abonnierten Datenbank müssen Sie zunächst die Replikation von der Datenbank entfernen. Wenn eine Datenbank beschädigt ist oder die Replikation nicht zuerst entfernt werden kann (oder beides), können Sie die Datenbank in den meisten Fällen trotzdem ablegen, indem ALTER DATABASE
Sie die Datenbank offline und dann ablegen.
Wenn die Datenbank für den Protokollversand verwendet wird, müssen Sie den Protokollversand vor dem Löschen der Datenbank entfernen. Weitere Informationen finden Sie unter Informationen zum Protokollversand (SQL Server).
Begrenzungen
Systemdatenbanken können nicht gelöscht werden.
Die DROP DATABASE
Anweisung muss im AutoCommit-Modus ausgeführt werden und ist in einer expliziten oder impliziten Transaktion nicht zulässig. Der Autocommitmodus ist der Standardmodus für die Transaktionsverwaltung.
Warnung
Sie können derzeit keine Datenbank ablegen, die gerade verwendet wird. Dies bedeutet, dass Datenbanken während eines Lese- oder Schreibvorgangs durch einen beliebigen Benutzer gesperrt sind. Eine Möglichkeit zum Entfernen von Benutzern aus der Datenbank besteht darin, ALTER DATABASE
die Datenbank auf SINGLE_USER festzulegen. In dieser Strategie sollten Sie die ALTER DATABASE
und DROP DATABASE
in demselben Batch ausführen, um eine andere Verbindung zu vermeiden, die eine einzelne Benutzersitzung erlaubt. Weitere Informationen finden Sie unter Beispiel D.
SQL Server
Alle Datenbankmomentaufnahmen in einer Datenbank müssen vor dem Löschen der Datenbank gelöscht werden.
Durch das Ablegen einer Datenbank, die für Stretch Database aktiviert ist, werden die Remotedaten nicht entfernt. Wenn Sie die Remotedaten löschen möchten, müssen Sie dies manuell tun.
Wichtig
Stretch Database ist in SQL Server 2022 (16.x) und der Azure SQL-Datenbank veraltet. Diese Funktion wird in einer zukünftigen Version der Datenbank-Engine entfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.
Azure SQL-Datenbank
Sie müssen mit der master
Datenbank verbunden sein, um eine Datenbank abzulegen.
Die DROP DATABASE
Anweisung muss die einzige Anweisung in einem SQL-Batch sein, und Sie können jeweils nur eine Datenbank ablegen.
Azure Synapse Analytics
Sie müssen mit der master
Datenbank verbunden sein, um eine Datenbank abzulegen.
Die DROP DATABASE
Anweisung muss die einzige Anweisung in einem SQL-Batch sein, und Sie können jeweils nur eine Datenbank ablegen.
Berechtigungen
SQL Server
Erfordert die CONTROL
Berechtigung für die Datenbank, die Berechtigung oder ALTER ANY DATABASE
die Mitgliedschaft in der db_owner festen Datenbankrolle.
Azure SQL-Datenbank
Datenbanken können nur durch den Prinzipalanmeldenamen auf Serverebene (vom Bereitstellungsprozess erstellt) oder Mitglieder der Datenbankrolle dbmanager gelöscht werden.
Analytics-Plattformsystem (PDW)
Erfordert die CONTROL
Berechtigung für die Datenbank, die Berechtigung oder ALTER ANY DATABASE
die Mitgliedschaft in der db_owner festen Datenbankrolle.
Beispiele
A. Ablegen einer einzelnen Datenbank
Im folgenden Beispiel wird die Datenbank Sales
entfernt.
DROP DATABASE Sales;
B. Mehrere Datenbanken ablegen
Im folgenden Beispiel wird jede der aufgelisteten Datenbanken entfernt.
DROP DATABASE Sales, NewSales;
C. Ablegen einer Datenbankmomentaufnahme
Im folgenden Beispiel wird eine Datenbankmomentaufnahme mit dem Namen sales_snapshot0600
entfernt, ohne dass sich dies auf die Quelldatenbank auswirkt.
DROP DATABASE sales_snapshot0600;
D: Ablegen einer Datenbank nach der Überprüfung, ob sie vorhanden ist
Im folgenden Beispiel wird zunächst überprüft, ob eine Datenbank mit dem Namen Sales
vorhanden ist. Wenn dies der Fall ist, wird im Beispiel für die Datenbank namens Sales
der Einzelbenutzermodus verwendet, um alle Sitzungsverbindungen zu trennen und dann die Datenbank zu löschen. Weitere Informationen zu SINGLE_USER finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL).
USE tempdb;
GO
DECLARE @SQL AS NVARCHAR (1000);
IF EXISTS (SELECT 1
FROM sys.databases
WHERE [name] = N'Sales')
BEGIN
SET @SQL = N'USE [Sales];
ALTER DATABASE Sales SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
USE [tempdb];
DROP DATABASE Sales;';
EXECUTE (@SQL);
END