DROP DATABASE (Transact-SQL)DROP DATABASE (Transact-SQL)

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure sìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Rimuove uno o più database utente o snapshot di database da un'istanza di SQL ServerSQL Server.Removes one or more user databases or database snapshots from an instance of SQL ServerSQL Server.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

-- SQL Server Syntax
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ] [;]
-- Azure SQL Database, Azure SQL Data Warehouse and Analytics Platform System Syntax
DROP DATABASE database_name [;]

ArgomentiArguments

IF EXISTS Si applica a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) fino alla versione corrente).IF EXISTS Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version).

Rimuove in modo condizionale il database solo se esiste già.Conditionally drops the database only if it already exists.

database_name specifica il nome del database da rimuovere.database_name Specifies the name of the database to be removed. Per visualizzare un elenco di database, usare la vista del catalogo sys.databases.To display a list of databases, use the sys.databases catalog view.

database_snapshot_name Si applica a: SQL Server 2008SQL Server 2008 fino a SQL Server 2017SQL Server 2017.database_snapshot_name Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Specifica il nome di uno snapshot del database da rimuovere.Specifies the name of a database snapshot to be removed.

Osservazioni generaliGeneral Remarks

Un database può essere rimosso indipendentemente dallo stato: offline, di sola lettura, sospetto e così via.A database can be dropped regardless of its state: offline, read-only, suspect, and so on. Per visualizzare lo stato corrente di un database, usare la vista del catalogo sys.databases.To display the current state of a database, use the sys.databases catalog view.

È possibile ricreare un database rimosso solo tramite il ripristino di un backup.A dropped database can be re-created only by restoring a backup. Non è possibile eseguire il backup degli snapshot di un database e, di conseguenza, non è possibile ripristinarli.Database snapshots cannot be backed up and, therefore, cannot be restored.

Dopo la rimozione di un database, è necessario eseguire il backup del database master.When a database is dropped, the master database should be backed up.

La rimozione di un database comporta l'eliminazione del database da un'istanza di SQL ServerSQL Server e dei relativi file su disco utilizzati.Dropping a database deletes the database from an instance of SQL ServerSQL Server and deletes the physical disk files used by the database. Se il database o uno dei relativi file è offline quando viene rimosso, i file su disco non vengono eliminati.If the database or any one of its files is offline when it is dropped, the disk files are not deleted. Questi file possono essere eliminati manualmente tramite Esplora risorse.These files can be deleted manually by using Windows Explorer. Per rimuovere un database dal server corrente senza eliminare i file dal file system, usare sp_detach_db.To remove a database from the current server without deleting the files from the file system, use 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.Dropping a database that has FILE_SNAPSHOT backups associated with it will succeed, but the database files that have associated snapshots will not be deleted to avoid invalidating the backups referring to these database files. Il file verrà troncato, ma non sarà eliminato fisicamente in modo da mantenere inalterati i backup FILE_SNAPSHOT.The file will be truncated, but will not be physically deleted in order to keep the FILE_SNAPSHOT backups intact. Per altre informazioni, vedere Backup e ripristino di SQL Server con il servizio di archiviazione BLOB di Microsoft Azure.For more information, see SQL Server Backup and Restore with Microsoft Azure Blob Storage Service. Si applica a: da SQL Server 2016 (13.x)SQL Server 2016 (13.x) alla versione corrente.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version.

SQL ServerSQL Server

La rimozione di uno snapshot di database comporta l'eliminazione dello snapshot del database in un'istanza di SQL ServerSQL Server e dei file sparse fisici del file system NTFS utilizzati dallo snapshot.Dropping a database snapshot deletes the database snapshot from an instance of SQL ServerSQL Server and deletes the physical NTFS File System sparse files used by the snapshot. Per informazioni sull'uso di file sparse con gli snapshot del database, vedere Snapshot del database.For information about using sparse files by database snapshots, see Database Snapshots. La rimozione di uno snapshot del database comporta la cancellazione della cache dei piani per l'istanza di SQL ServerSQL Server.Dropping a database snapshot clears the plan cache for the instance of SQL ServerSQL 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.Clearing the plan cache causes a recompilation of all subsequent execution plans and can cause a sudden, temporary decrease in query performance. Il log degli errori di SQL ServerSQL Server contiene il messaggio informativo seguente per ogni archivio cache cancellato nella cache dei piani: "SQL ServerSQL 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".For each cleared cachestore in the plan cache, the SQL ServerSQL Server error log contains the following informational message: " SQL ServerSQL 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". Questo messaggio viene registrato ogni cinque minuti per tutta la durata dello scaricamento della cache.This message is logged every five minutes as long as the cache is flushed within that time interval.

InteroperabilitàInteroperability

SQL ServerSQL 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.To drop a database published for transactional replication, or published or subscribed to merge replication, you must first remove replication from the 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.If a database is damaged or replication cannot first be removed or both, in most cases you still can drop the database by using ALTER DATABASE to set the database offline and then dropping it.

Se il database è coinvolto nel log shipping, rimuovere quest'ultimo prima di eliminare il database.If the database is involved in log shipping, remove log shipping before dropping the database. Per altre informazioni, vedere Informazioni sul log shipping.For more information, see About Log Shipping.

Limitazioni e restrizioniLimitations and Restrictions

I database di sistema non possono essere eliminati.System databases cannot be dropped.

L'istruzione DROP DATABASE deve essere eseguita in modalità autocommit e non è consentita in una transazione esplicita o implicita.The DROP DATABASE statement must run in autocommit mode and is not allowed in an explicit or implicit transaction. La modalità autocommit è la modalità predefinita per la gestione delle transazioni.Autocommit mode is the default transaction management mode.

Non è possibile rimuovere un database in uso,You cannot drop a database currently being used. ovvero aperto per la lettura o la scrittura da parte di un utente.This means open for reading or writing by any user. Per rimuovere gli utenti dal database, usare ALTER DATABASE per impostare il database su SINGLE_USER.One way to remove users from the database is to use ALTER DATABASE to set the database to SINGLE_USER.

Avviso

Questo non è un approccio a prova di errore, poiché la prima connessione consecutiva eseguita da qualsiasi thread riceverà il thread SINGLE_USER, causando un errore di connessione.This is not a fail-proof approach, since first consecutive connection made by any thread will receive the SINGLE_USER thread, causing your connection to fail. SQL Server non offre un metodo incorporato per eliminare i database sotto carico.Sql server does not provide a built-in way to drop databases under load.

SQL ServerSQL Server

Prima di poter rimuovere un database, è necessario eliminare tutti gli snapshot del database.Any database snapshots on a database must be dropped before the database can be dropped.

L'eliminazione di un database abilitato per Stretch Database non determina la rimozione dei dati remoti.Dropping a database enable for Stretch Database does not remove the remote data. Per eliminare i dati remoti, è necessario rimuoverli manualmente.If you want to delete the remote data, you have to remove it manually.

Database SQL di AzureAzure SQL Database

È necessario essere connessi al database master per eliminare un database.You must be connected to the master database to drop a database.

L'istruzione DROP DATABASE deve essere l'unica istruzione in un batch SQL ed è possibile eliminare un solo database alla volta.The DROP DATABASE statement must be the only statement in a SQL batch and you can drop only one database at a time.

Azure SQL Data WarehouseAzure SQL Data Warehouse

È necessario essere connessi al database master per eliminare un database.You must be connected to the master database to drop a database.

L'istruzione DROP DATABASE deve essere l'unica istruzione in un batch SQL ed è possibile eliminare un solo database alla volta.The DROP DATABASE statement must be the only statement in a SQL batch and you can drop only one database at a time.

AutorizzazioniPermissions

SQL ServerSQL Server

È richiesta l'autorizzazione CONTROL per il database, l'autorizzazione ALTER ANY DATABASE o l'appartenenza al ruolo predefinito del database db_owner.Requires the CONTROL permission on the database, or ALTER ANY DATABASE permission, or membership in the db_owner fixed database role.

Database SQL di AzureAzure SQL Database

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.Only the server-level principal login (created by the provisioning process) or members of the dbmanager database role can drop a database.

Parallel Data WarehouseParallel Data Warehouse

È richiesta l'autorizzazione CONTROL per il database, l'autorizzazione ALTER ANY DATABASE o l'appartenenza al ruolo predefinito del database db_owner.Requires the CONTROL permission on the database, or ALTER ANY DATABASE permission, or membership in the db_owner fixed database role.

EsempiExamples

A.A. Rimozione di un singolo databaseDropping a single database

Nell'esempio seguente viene rimosso il database Sales.The following example removes the Sales database.

DROP DATABASE Sales;

B.B. Rimozione di più databaseDropping multiple databases

Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Nell'esempio seguente vengono rimossi tutti i database elencati.The following example removes each of the listed databases.

DROP DATABASE Sales, NewSales;

C.C. Eliminazione di uno snapshot del databaseDropping a database snapshot

Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Nell'esempio seguente viene rimosso uno snapshot di database, denominato sales_snapshot0600, senza influire sul database di origine.The following example removes a database snapshot, named sales_snapshot0600, without affecting the source database.

DROP DATABASE sales_snapshot0600;

Vedere ancheSee Also