DROP DATABASE (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Entfernt eine oder mehrere Benutzerdatenbanken oder Datenbank-Momentaufnahmen aus einer SQL Server-Instanz.

Transact-SQL-Syntaxkonventionen

Syntax

-- SQL Server Syntax
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ] [;]
-- Azure SQL Database, Azure Synapse Analytics and Analytics Platform System Syntax
DROP DATABASE database_name [;]

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

IF EXISTS
Gilt für: SQL Server (SQL Server 2016 (13.x) bis zur aktuellen Version).

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_nameGilt für: SQL Server 2008 (10.0.x) und höher

Gibt den Namen der zu entfernenden Datenbankmomentaufnahme an.

Allgemeine Hinweise

Eine Datenbank kann unabhängig von ihrem Status (offline, schreibgeschützt, fehlerverdächtig usw.) gelöscht werden. Zur Anzeige des aktuellen Status einer Datenbank verwenden Sie die sys.databases-Katalogsicht.

Eine gelöschte Datenbank kann nur neu erstellt werden, indem eine Sicherungskopie wiederhergestellt wird. Datenbankmomentaufnahmen können nicht gesichert und somit 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 ihrer Dateien beim Löschen offline ist, werden die Datenträgerdateien nicht gelöscht. Diese Dateien können manuell mit dem Windows-Explorers 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

Sie können zwar eine Datenbankdatei entfernen, der FILE_SNAPSHOT-Sicherungen zugeordnet sind, jedoch werden keine Datenbankdateien gelöscht, denen Momentaufnahmen zugeordnet sind, um zu vermeiden, dass die Sicherungen, die auf die Datenbankdatei verweisen, ungültig gemacht werden. Die Datei wird zwar abgeschnitten, aber nicht physisch gelöscht, damit die FILE_SNAPSHOT-Sicherungen vollständig erhalten bleiben. Weitere Informationen finden Sie unter SQL Server-Sicherung und -Wiederherstellung mit Microsoft Azure Blob Storage. Gilt für: SQL Server 2016 (13.x) bis zur aktuellen Version.

SQL Server

Wenn Sie eine Datenbankmomentaufnahme löschen, wird diese aus einer SQL Server-Instanz gelöscht. Außerdem werden die Sparsedateien des physischen NTFS-Dateisystems gelöscht, die von der Momentaufnahme verwendet werden. Informationen zum Verwenden von Sparsedateien für Datenbankmomentaufnahmen finden Sie unter Datenbankmomentaufnahmen. Durch das Löschen einer Datenbankmomentaufnahme wird der Plancache für die Instanz von SQL Server gelöscht. 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 geleerten Cachespeicher im Plancache enthält das SQL Server-Fehlerprotokoll folgende Meldung zur Information: „SQL Server hat für den "%2!s!"-Cachespeicher (Bestandteil des Plancache) %1!s! Leerungen des Cachespeichers gefunden, die von Datenbankwartungs- oder Neukonfigurierungsvorgängen ausgelöst wurden.“. Diese Meldung wird alle fünf Minuten protokolliert, solange der Cache innerhalb dieses Zeitintervalls geleert wird.

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 wenn beides zutrifft, können Sie die Datenbank dennoch mithilfe von ALTER DATABASE löschen. Sie legen hierzu den Status der Datenbank auf offline fest und löschen diese dann.

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.

Einschränkungen

Systemdatenbanken können nicht gelöscht werden.

Die DROP DATABASE-Anweisung muss im Autocommitmodus 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 eine aktuell verwendete Datenbank nicht löschen. Dies bedeutet, dass Datenbanken während eines Lese- oder Schreibvorgangs durch einen beliebigen Benutzer gesperrt sind. Zum Entfernen von Benutzern aus der Datenbank können Sie z.B. die Datenbank mithilfe von ALTER DATABASE auf SINGLE_USER festlegen. Bei dieser Methode sollten Sie ALTER DATABASE und DROP DATABASE im gleichen Batch ausführen, um zu vermeiden, dass eine andere Verbindung zugelassen wird, die eine einzelne Benutzersitzung beansprucht. Informationen finden Sie weiter unten in Beispiel D.

SQL Server

Alle Datenbankmomentaufnahmen in einer Datenbank müssen vor dem Löschen der Datenbank gelöscht werden.

Wenn eine Datenbank gelöscht wird, die für Stretch Database aktiviert ist, werden keine Remotedaten gelöscht. 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 zu löschen.

Die DROP DATABASE-Anweisung muss die einzige Anweisung in einem SQL-Batch sein, und es darf jeweils nur eine Datenbank gelöscht werden.

Azure Synapse Analytics

Sie müssen mit der master-Datenbank verbunden sein, um eine Datenbank zu löschen.

Die DROP DATABASE-Anweisung muss die einzige Anweisung in einem SQL-Batch sein, und es darf jeweils nur eine Datenbank gelöscht werden.

Berechtigungen

SQL Server

Erfordert die CONTROL-Berechtigung für die Datenbank, die ALTER ANY DATABASE-Berechtigung oder die Mitgliedschaft in der festen Datenbankrolle db_owner.

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 ALTER ANY DATABASE-Berechtigung oder die Mitgliedschaft in der festen Datenbankrolle db_owner.

Beispiele

A. Löschen einer einzelnen Datenbank

Im folgenden Beispiel wird die Datenbank Sales entfernt.

DROP DATABASE Sales;

B. Löschen mehrerer Datenbanken

Gilt für: SQL Server 2008 (10.0.x) und höher

Im folgenden Beispiel wird jede der aufgelisteten Datenbanken entfernt.

DROP DATABASE Sales, NewSales;

C. Löschen einer Datenbankmomentaufnahme

Gilt für: SQL Server 2008 (10.0.x) und höher

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: Löschen einer Datenbank nach der Überprüfung, ob diese 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 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;';
    EXEC (@SQL);
END;

Weitere Informationen