DROP DATABASE (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

Remove um ou mais bancos de dados de usuário ou instantâneos do banco de dados de uma instância do SQL Server.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

IF EXISTS
Aplica-se a: SQL Server (SQL Server 2016 (13.x) até a versão atual).

Remove condicionalmente o banco de dados somente se ele já existe.

database_name Especifica o nome do banco de dados a ser removido. Para exibir uma lista de bancos de dados, use a exibição de catálogo sys.databases.

database_snapshot_nameAplica-se a: SQL Server 2008 (10.0.x) e posterior.

Especifica o nome de um instantâneo do banco de dados a ser removido.

Comentários gerais

Um banco de dados pode ser removido independentemente de seu estado: offline, somente leitura, suspeito e assim por diante. Para exibir o estado atual de um banco de dados, use a exibição de catálogo sys.databases.

Um banco de dados cancelado poderá ser recriado somente por meio da restauração de um backup. Não é possível efetuar backup de instantâneos do banco de dados, portanto, eles não podem ser restaurados.

Quando um banco de dados é removido, o banco de dados mestre deve ser copiado em backup.

O descarte de um banco de dados exclui o banco de dados de uma instância do SQL Server e exclui os arquivos de disco físicos usados pelo banco de dados. Se o banco de dados ou qualquer um de seus arquivos estiverem offline quando forem cancelados, os arquivos em disco não serão excluídos. Esses arquivos podem ser excluídos manualmente usando o Windows Explorer. Para remover um banco de dados do servidor atual sem excluir os arquivos do sistema de arquivos, use sp_detach_db.

Aviso

A remoção de um banco de dados que tem backups de FILE_SNAPSHOT associados a ele terá êxito, mas os arquivos de banco de dados que têm instantâneos associados não serão excluídos, para evitar a anulação dos backups que referenciam esses arquivos de banco de dados. O arquivo será truncado, mas não será fisicamente excluído para manter os backups de FILE_SNAPSHOT intactos. Para obter mais informações, confira Backup e restauração do SQL Server com o Armazenamento de Blobs do Microsoft Azure. Aplica-se a: SQL Server 2016 (13.x) à versão atual.

SQL Server

O descarte de um instantâneo de banco de dados o exclui de uma instância do SQL Server e exclui os arquivos físicos esparsos do Sistema de Arquivos NTFS utilizados pelo instantâneo. Para obter informações sobre como usar arquivos esparsos por instantâneos de banco de dados, consulte Instantâneos de banco de dados. O cancelamento de um instantâneo do banco de dados limpa o cache de plano para a instância do SQL Server. A limpeza do cache de planos gera uma recompilação de todos os planos de execução subsequentes e pode provocar uma redução repentina e temporária do desempenho de consultas. Para cada armazenamento em cache limpo no cache de planos, o log de erros do SQL Server contém a seguinte mensagem informativa: "SQL Server encontrou %d ocorrências de liberação de armazenamento em cache para o armazenamento em cache '%s' (parte do cache de planos) devido a operações de reconfiguração ou manutenção do banco de dados". Essa mensagem é registrada a cada cinco minutos, contanto que o cache seja liberado dentro desse intervalo de tempo.

Interoperabilidade

SQL Server

Para cancelar um banco de dados publicado para replicação transacional ou publicado ou inscrito para replicação de mesclagem, você deve primeiro remover a replicação do banco de dados. Se um banco de dados estiver danificado ou não for possível remover a replicação primeiro ou ambos, na maioria dos casos você ainda pode cancelar o banco de dados usando ALTER DATABASE para definir o banco de dados offline e depois cancelá-lo.

Se o banco de dados estiver envolvido em envio de logs, remova o envio do log antes de cancelá-lo. Para obter mais informações, consulte Sobre o Envio de Logs.

Limitações e Restrições

Os bancos de dados do sistema não podem ser removidos.

Uma instrução DROP DATABASE deve ser executada no modo de confirmação automática e não é permitida uma transação explícita ou implícita. O modo de confirmação automática é o modo padrão de gerenciamento de transações.

Aviso

Você não pode cancelar um banco de dados que estiver sendo utilizado. Isso significa que os bloqueios para leitura ou gravação estão sendo mantidos por qualquer usuário. Uma forma de remover usuários do banco de dados é usar ALTER DATABASE para definir o banco de dados como SINGLE_USER. Nessa estratégia, você deve executar ALTER DATABASE e DROP DATABASE no mesmo lote, para evitar que outra conexão declare uma sessão de usuário único permitida. Veja o exemplo D abaixo.

SQL Server

Qualquer instantâneo de banco de dados em um banco de dados deve ser cancelado antes que o banco de dados seja cancelado.

A remoção de um banco de dados permite que o Stretch Database não remova os dados remotos. Se você deseja excluir os dados remotos, precisa removê-los manualmente.

Importante

O banco de dados de ampliação foi preterido no SQL Server 2022 (16.x) e no Banco de Dados SQL do Azure. Esse recurso será removido em uma versão futura do mecanismo de banco de dados. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

Banco de Dados SQL do Azure

Você deve estar conectado ao banco de dados mestre para descartar um banco de dados.

A instrução DROP DATABASE deve ser a única instrução em um lote de SQL, e você poderá descartar apenas um banco de dados de cada vez.

Azure Synapse Analytics

Você deve estar conectado ao banco de dados mestre para descartar um banco de dados.

A instrução DROP DATABASE deve ser a única instrução em um lote de SQL, e você poderá descartar apenas um banco de dados de cada vez.

Permissões

SQL Server

Exige a permissão CONTROL no banco de dados, a permissão ALTER ANY DATABASE ou a associação na função de banco de dados fixa db_owner.

Banco de Dados SQL do Azure

Somente o logon da entidade de segurança no nível do servidor (criado pelo processo de provisionamento) ou os membros da função de banco de dados dbmanager podem remover um banco de dados.

PDW (Analytics Platform System)

Exige a permissão CONTROL no banco de dados, a permissão ALTER ANY DATABASE ou a associação na função de banco de dados fixa db_owner.

Exemplos

a. Removendo um único banco de dados

O exemplo a seguir remove o nome do banco de dados Sales:

DROP DATABASE Sales;

B. Removendo vários bancos de dados

Aplica-se a: SQL Server 2008 (10.0.x) e posterior.

O exemplo a seguir remove cada um dos bancos de dados listados.

DROP DATABASE Sales, NewSales;

C. Removendo um instantâneo de banco de dados

Aplica-se a: SQL Server 2008 (10.0.x) e posterior.

O exemplo a seguir remove um instantâneo do banco de dados, chamado sales_snapshot0600, sem afetar o banco de dados de origem.

DROP DATABASE sales_snapshot0600;

D. Remover um banco de dados depois de verificar se ele existe

O exemplo a seguir verifica primeiro se existe um banco de dados chamado Sales. Nesse caso, o exemplo altera o banco de dados chamado Sales para o modo de usuário único para forçar a desconexão de todas as outras sessões e remove o banco de dados. Para obter mais informações sobre SINGLE_USER, confira as opções 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;

Consulte Também