DROP DATABASE (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)

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

Convenzioni di 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 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

IF EXISTS
Si applica a: SQL Server ( SQL Server 2016 (13.x) fino 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 (10.0.x) 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 usati. 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 Microsoft Archiviazione BLOB di Azure. Si applica a: SQL Server 2016 (13.x) fino 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 usati 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. Per ogni archivio cache cancellato nella cache dei piani, il log degli errori di SQL Server contiene il messaggio informativo seguente: "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, ovvero con blocchi mantenuti per la lettura o la scrittura da parte di un utente. Per rimuovere gli utenti dal database, usare ALTER DATABASE per impostare il database su SINGLE_USER. In questa strategia è consigliabile eseguire ALTER DATABASE e DROP DATABASE nello stesso batch, per evitare un'altra connessione che attesti una sessione a utente singolo consentita. Vedere l'esempio D riportato 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.

Importante

Stretch Database è deprecato in SQL Server 2022 (16.x) e database SQL di Azure. Questa funzionalità verrà rimossa in una versione futura 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 Microsoft 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 Microsoft 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 (10.0.x) 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 (10.0.x) 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 averne verificato l'esistenza

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

Vedi anche