DROP DATABASE (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformní systém (PDW)

Odstraní jednu nebo více uživatelských databází nebo snímků databáze z instance Databázový stroj systému SQL Server.

Transact-SQL konvence syntaxe

Syntax

Syntaxe SQL Server.

DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ]
[ ; ]

Azure SQL Database, Azure Synapse Analytics a Analytics Platform System syntax.

DROP DATABASE database_name
[ ; ]

Arguments

POKUD EXISTUJE

platí pro: SQL Server 2016 (13.x) a novější verze

Podmíněně zruší databázi pouze pokud už existuje.

database_name

Specifikuje název databáze, která má být odstraněna. Pro zobrazení seznamu databází použijte katalogový pohled sys.databases .

database_snapshot_name

Specifikuje název snímku databáze, který má být odstraněn.

Remarks

Databáze může být odstraněna bez ohledu na její stav: offline, pouze pro čtení, podezřelá a podobně. Pro zobrazení aktuálního stavu databáze použijte sys.databases katalogový pohled.

Ztracenou databázi lze znovu vytvořit pouze obnovením zálohy. Snímky databáze nelze zálohovat, a tedy je nelze obnovit.

Když je databáze odstraněna, hlavní databáze by měla být zálohována.

Vyhození databáze smaže databázi z instance SQL Server a smaže fyzické diskové soubory používané databází. Pokud je databáze nebo některý z jejích souborů při ztrátě offline, diskové soubory se nemažou. Tyto soubory lze ručně smazat pomocí správce souborů, jako je Průzkumník souborů. Pro odstranění databáze ze současného serveru bez mazání souborů ze souborového systému použijte sp_detach_db.

Warning

V SQL Server 2016 (13.x) a novějších verzích bude úspěšné vyřadit databázi, která obsahuje FILE_SNAPSHOT zálohy, ale databázové soubory s přidruženými snapshoty nebudou smazány, aby se zabránilo zneplatnění záloh odkazujících na tyto databázové soubory. Soubor bude zkrácen, ale fyzicky nebude smazán, aby zálohy zůstaly FILE_SNAPSHOT neporušené. Pro více informací viz SQL Server zálohování a obnova s Azure Blob Storage.

SQL Server

Vypuštěním snímku databáze se smaže snímek z instance SQL Server a smaže se řídké soubory fyzického NTFS souborového systému, které snapshot používá. Pro informace o využití řídkých souborů pomocí snímků databáze viz Database snapshots (SQL Server). Vypuštění snímku databáze vymaže záznamy v plánové cache spojené se snímkem databáze, nikoli celou instanci. Vymazání mezipaměti plánu způsobí rekompilace všech následných plánů spuštění a může způsobit náhlé dočasné snížení výkonu dotazů.

Pro každý vymazaný cachestore v plánové cache obsahuje chybový log SQL Server následující informační zprávu. Tato zpráva se protokoluje každých pět minut, dokud se mezipaměť vyprázdní v daném časovém intervalu.

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.

Interoperability

SQL Server

Chcete-li odstranit databázi publikovanou pro transakční replikaci, nebo publikovanou či předplacenou pro replikaci sloučení, musíte nejprve replikaci z databáze odstranit. Pokud je databáze poškozená, nebo replikace nejdřív může být odstraněna (nebo obojí), ve většině případů můžete databázi stále zrušit tak, že ji použijete ALTER DATABASE na offline a pak ji odložíte.

Pokud je databáze zapojena do přepravy logů, odstraňte odeslání logů před ukončením databáze. Další informace naleznete v tématu o log shippingu (SQL Server).

Limitations

Systémové databáze nelze zrušit.

Příkaz DROP DATABASE musí běžet v režimu automatického závazku a není povolen v explicitní ani implicitní transakci. Režim automatického potvrzení je výchozí režim správy transakcí.

Warning

Nemůžeš zrušit databázi, která je právě používána. To znamená, že zámky musí být drženy pro čtení nebo zápis jakýmkoli uživatelem. Jedním ze způsobů, jak uživatele z databáze odstranit, je ALTER DATABASE nastavit databázi na SINGLE_USER. V této strategii byste měli vykonávat and ALTER DATABASEDROP DATABASE ve stejné dávce, abyste předešli dalšímu připojení, které by tvrdilo, že je relace pro jednoho uživatele povolena. Pro více informací viz Příklad D.

SQL Server

Jakékoli snímky databáze v databázi musí být nejprve odstraněny, než může být databáze odstraněna.

Zrušení povolení databáze pro Stretch Database vzdálená data neodstraní. Pokud chcete vzdálená data smazat, musíte je odstranit ručně.

Important

Funkce Stretch Database je v SQL Serveru 2022 (16.x) a Azure SQL Database zastaralá. Tato funkce bude odebrána v budoucí verzi databázového stroje. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají.

Azure SQL Database

Musíte být připojeni k databázi master , abyste mohli databázi ztratit.

Příkaz DROP DATABASE musí být jediným příkazem v SQL dávkování a můžete najednou vyhodit jen jednu databázi.

Azure Synapse Analytics

Musíte být připojeni k databázi master , abyste mohli databázi ztratit.

Příkaz DROP DATABASE musí být jediným příkazem v SQL dávkování a můžete najednou vyhodit jen jednu databázi.

Permissions

SQL Server

Vyžaduje oprávnění CONTROL k databázi, ALTER ANY DATABASE oprávnění nebo členství v db_owner pevné databázové roli.

Azure SQL Database

Databázi mohou zbavit pouze hlavní přihlášení na úrovni serveru (vytvořené procesem provisioningu) nebo členové databázové role dbmanager .

PdW (Analytics Platform System)

Vyžaduje oprávnění CONTROL k databázi, ALTER ANY DATABASE oprávnění nebo členství v db_owner pevné databázové roli.

Examples

A. Zrušte jednu databázi

Následující příklad databázi Sales odstraní.

DROP DATABASE Sales;

B. Zrušte více databází

Následující příklad odstraní každou z uvedených databází.

DROP DATABASE Sales, NewSales;

C. Vložte snímek databáze

Následující příklad odstraní snímek databáze s názvem sales_snapshot0600, aniž by ovlivnil zdrojovou databázi.

DROP DATABASE sales_snapshot0600;

D. Zrušte databázi poté, co zkontrolujete, zda existuje

Následující příklad nejprve ověřuje, zda existuje databáze s názvem Sales E. Pokud ano, příklad změní databázi pojmenovanou Sales do režimu jednoho uživatele, aby vynutil odpojení všech ostatních relací, a databázi pak ukončí. Pro více informací o SINGLE_USER viz ALTER DATABASE SET možnosti.

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