DROP DATABASE (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

Rimuove uno o più database utente o snapshot di database da un'istanza di SQL Server.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

-- 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 [;]

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

IF EXISTS
Si applica a: SQL Server (da SQL Server 2016 (13.x) alla versione corrente).

Rimuove in modo condizionale il database solo se esiste già.

database_name specifica il nome del database da rimuovere. Per visualizzare un elenco di database, usare la vista del catalogo sys.databases.

database_snapshot_name Si applica a: SQL Server 2008 e versioni successive.

Specifica il nome di uno snapshot del database da rimuovere.

Osservazioni generali

Un database può essere rimosso indipendentemente dallo stato: offline, di sola lettura, sospetto e così via. Per visualizzare lo stato corrente di un database, usare la vista del catalogo sys.databases.

È possibile ricreare un database rimosso solo tramite il ripristino di un backup. Non è possibile eseguire il backup degli snapshot di un database e, di conseguenza, non è possibile ripristinarli.

Dopo la rimozione di un database, è necessario eseguire il backup del database master.

La rimozione di un database comporta l'eliminazione del database da un'istanza di SQL Server e dei relativi file su disco utilizzati. Se il database o uno dei relativi file è offline quando viene rimosso, i file su disco non vengono eliminati. Questi file possono essere eliminati manualmente tramite Esplora risorse. Per rimuovere un database dal server corrente senza eliminare i file dal file system, usare sp_detach_db.

Avviso

Sarà possibile rimuovere un database con backup FILE_SNAPSHOT associati, ma i file del database con snapshot associati non verranno eliminati per evitare di invalidare i backup che fanno riferimento a tali file del database. Il file verrà troncato, ma non sarà eliminato fisicamente in modo da mantenere inalterati i backup FILE_SNAPSHOT. Per altre informazioni, vedere Backup e ripristino di SQL Server con il servizio di archiviazione BLOB di Microsoft Azure. Si applica a: da SQL Server 2016 (13.x) alla versione corrente.

SQL Server

La rimozione di uno snapshot di database comporta l'eliminazione dello snapshot del database in un'istanza di SQL Server e dei file sparse fisici del file system NTFS utilizzati dallo snapshot. Per informazioni sull'uso di file sparse con gli snapshot del database, vedere Snapshot del database. La rimozione di uno snapshot del database comporta la cancellazione della cache dei piani per l'istanza di SQL Server. La cancellazione della cache dei piani comporta la ricompilazione di tutti i piani di esecuzione successivi e può causare un peggioramento improvviso e temporaneo delle prestazioni di esecuzione delle query. Il log degli errori di SQL Server contiene il messaggio informativo seguente per ogni archivio cache cancellato nella cache dei piani: "SQL Server ha rilevato %d occorrenza/e di scaricamento dell'archivio cache '%s' (parte della cache dei piani) a causa di operazioni di manutenzione o riconfigurazione del database". Questo messaggio viene registrato ogni cinque minuti per tutta la durata dello scaricamento della cache.

Interoperabilità

SQL Server

Per rimuovere un database pubblicato per la replica transazionale, o pubblicato o sottoscritto per la replica di tipo merge, è necessario innanzitutto rimuovere la replica dal database. Se un database è danneggiato, se non è possibile rimuovere prima la replica o se si verificano entrambe le situazioni, nella maggior parte dei casi è comunque possibile eliminare il database tramite ALTER DATABASE per impostarlo offline e, successivamente, rimuoverlo.

Se il database è coinvolto nel log shipping, rimuovere quest'ultimo prima di eliminare il database. Per altre informazioni, vedere Informazioni sul log shipping.

Limitazioni e restrizioni

I database di sistema non possono essere eliminati.

L'istruzione DROP DATABASE deve essere eseguita in modalità autocommit e non è consentita in una transazione esplicita o implicita. La modalità autocommit è la modalità predefinita per la gestione delle transazioni.

Avviso

Non è possibile rimuovere un database in uso, Ciò significa che i blocchi vengono mantenuti per la lettura o la scrittura da parte di qualsiasi utente. Per rimuovere gli utenti dal database, usare ALTER DATABASE per impostare il database su SINGLE_USER. In questa strategia, è necessario eseguire ALTER DATABASE e DROP DATABASE nello stesso batch, per evitare che un'altra connessione che attesta una singola sessione utente consentita. Vedere l'esempio D di seguito.

SQL Server

Prima di poter rimuovere un database, è necessario eliminare tutti gli snapshot del database.

L'eliminazione di un database abilitato per Stretch Database non determina la rimozione dei dati remoti. Per eliminare i dati remoti, è necessario rimuoverli manualmente.

database SQL di Azure

È necessario essere connessi al database master per eliminare un database.

L'istruzione DROP DATABASE deve essere l'unica istruzione in un batch SQL ed è possibile eliminare un solo database alla volta.

Azure Synapse Analytics

È necessario essere connessi al database master per eliminare un database.

L'istruzione DROP DATABASE deve essere l'unica istruzione in un batch SQL ed è possibile eliminare un solo database alla volta.

Autorizzazioni

SQL Server

È richiesta l'autorizzazione CONTROL per il database, l'autorizzazione ALTER ANY DATABASE o l'appartenenza al ruolo predefinito del database db_owner.

database SQL di Azure

Solo l'account di accesso dell'entità di livello server (creato dal processo di provisioning) o i membri del ruolo del database dbmanager possono eliminare un database.

Piattaforma di strumenti analitici (PDW)

È richiesta l'autorizzazione CONTROL per il database, l'autorizzazione ALTER ANY DATABASE o l'appartenenza al ruolo predefinito del database db_owner.

Esempi

R. Rimozione di un singolo database

Nell'esempio seguente viene rimosso il database Sales.

DROP DATABASE Sales;

B. Rimozione di più database

Si applica a: SQL Server 2008 e versioni successive.

Nell'esempio seguente vengono rimossi tutti i database elencati.

DROP DATABASE Sales, NewSales;

C. Eliminazione di uno snapshot del database

Si applica a: SQL Server 2008 e versioni successive.

Nell'esempio seguente viene rimosso uno snapshot di database, denominato sales_snapshot0600, senza influire sul database di origine.

DROP DATABASE sales_snapshot0600;

D. Eliminazione di un database dopo aver verificato se esiste

Nell'esempio seguente viene innanzitutto verificato se esiste un database Sales denominato . In questo caso, il database denominato viene modificato in modalità utente singolo per forzare la disconnessione di tutte le altre Sales sessioni, quindi elimina il database. Per altre informazioni sulle SINGLE_USER, vedere Opzioni ALTER DATABASE SET.

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;

Vedere anche