DROP DATABASE (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

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

Convenzioni relative alla sintassi Transact-SQL

Sintassi

Sintassi di SQL Server.

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

database SQL di Azure, azure Synapse Analytics e la sintassi del sistema della piattaforma di analisi.

DROP DATABASE database_name
[ ; ]

Argomenti

IF EXISTS

Si applica a: SQL Server 2016 (13.x) e versioni successive

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

Specifica il nome di uno snapshot del database da rimuovere.

Osservazioni:

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

È possibile ricreare un database rimosso solo tramite il ripristino di un backup. Non è possibile eseguire il backup degli snapshot del database e, pertanto, non può essere ripristinato.

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 usati. Se il database o uno dei relativi file è offline quando viene eliminato, i file del disco non vengono eliminati. Questi file possono essere eliminati manualmente usando una gestione file, ad esempio Esplora file. Per rimuovere un database dal server corrente senza eliminare i file dal file system, usare sp_detach_db.

Avviso

In SQL Server 2016 (13.x) e versioni successive, l'eliminazione di un database con FILE_SNAPSHOT backup associati avrà esito positivo, ma i file di database con snapshot associati non verranno eliminati per evitare di invalidare i backup che fanno riferimento a questi file di database. Il file verrà troncato, ma non verrà eliminato fisicamente per mantenere intatti i FILE_SNAPSHOT backup. Per altre informazioni, vedere Backup e ripristino di SQL Server con Archiviazione BLOB di Azure.

SQL Server

L'eliminazione di uno snapshot del database elimina lo snapshot del database da un'istanza di SQL Server ed elimina i file sparse del file system NTFS fisici usati dallo snapshot. Per informazioni sull'uso di file sparse per snapshot del database, vedere Snapshot del database (SQL Server). L'eliminazione di uno snapshot del database cancella le voci nella cache dei piani associata allo snapshot del database, non l'istanza nel suo complesso. 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.

Per ogni archivio cache cancellato nella cache dei piani, il log degli errori di SQL Server contiene il messaggio informativo seguente. Questo messaggio viene registrato ogni cinque minuti per tutta la durata dello scaricamento della cache.

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à

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 o la replica non può essere prima rimossa (o entrambe), nella maggior parte dei casi è comunque possibile eliminare il database usando ALTER DATABASE per impostare il database offline e quindi eliminarlo.

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

Limiti

Non è possibile eliminare i database di sistema.

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 eliminare un database attualmente in uso. ovvero con blocchi mantenuti per la lettura o la scrittura da parte di un utente. Un modo per rimuovere gli utenti dal database consiste nell'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 un'altra connessione che richiede la sessione utente singola consentita. Per altre informazioni, vedere Esempio D.

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 rimuove i dati remoti. Per eliminare i dati remoti, è necessario rimuoverli manualmente.

Importante

Stretch Database è deprecato in SQL Server 2022 (16.x) e database SQL di Azure. Questa funzionalità verrà rimossa nelle versioni future del motore di database. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Database SQL di Azure

Per eliminare un database, è necessario essere connessi al master 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

Per eliminare un database, è necessario essere connessi al master 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 o ALTER ANY DATABASE 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 o ALTER ANY DATABASE l'appartenenza al ruolo predefinito del database db_owner .

Esempi

R. Eliminare un database singolo

Nell'esempio seguente viene rimosso il database Sales.

DROP DATABASE Sales;

B. Eliminare più database

Nell'esempio seguente vengono rimossi tutti i database elencati.

DROP DATABASE Sales, NewSales;

C. Eliminare uno snapshot del database

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

DROP DATABASE sales_snapshot0600;

D. Eliminare un database dopo aver verificato se esiste

L'esempio seguente verifica prima di tutto se esista un database denominato Sales. In tal caso, l'esempio modifica il database denominato Sales in modalità utente singolo per forzare la disconnessione di tutte le altre sessioni, quindi elimina il database. Per altre informazioni su SINGLE_USER, vedere Opzioni di ALTER DATABASE SET.

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