Freigeben über


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