Compartilhar via


DROP DATABASE (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

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

Convenções de sintaxe de Transact-SQL

Sintaxe

Sintaxe do SQL Server.

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

Banco de Dados SQL do Azure, Azure Synapse Analytics e sintaxe do Sistema de Plataforma de Análise.

DROP DATABASE database_name
[ ; ]

Argumentos

IF EXISTS

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores

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_name

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

Comentários

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 sys.databases catálogo.

Um banco de dados cancelado poderá ser recriado somente por meio da restauração de um backup. Não é possível fazer backup de instantâneos de banco de dados e, portanto, 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, estiver offline quando descartado, os arquivos de disco não serão excluídos. Esses arquivos podem ser excluídos manualmente usando um gerenciador de arquivos, como o Explorador de Arquivos. Para remover um banco de dados do servidor atual sem excluir os arquivos do sistema de arquivos, use sp_detach_db.

Aviso

No SQL Server 2016 (13.x) e versões posteriores, descartar um banco de dados que tenha FILE_SNAPSHOT backups associados a ele será bem-sucedido, mas os arquivos de banco de dados que têm instantâneos associados não serão excluídos para evitar a invalidação dos backups referentes a esses arquivos de banco de dados. O arquivo será truncado, mas não será excluído fisicamente para manter os FILE_SNAPSHOT backups intactos. Para obter mais informações, consulte Backup e restauração do SQL Server com o Armazenamento de Blobs do Azure.

SQL Server

Descartar um instantâneo de banco de dados exclui o instantâneo de banco de dados de uma instância do SQL Server e exclui os arquivos esparsos do sistema de arquivos NTFS físico usados 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 (SQL Server). Descartar um instantâneo de banco de dados limpa as entradas no cache de planos associado ao instantâneo do banco de dados, não a instância como um todo. 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. Essa mensagem é registrada a cada cinco minutos, contanto que o cache seja liberado dentro desse intervalo de tempo.

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.

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 a replicação não puder ser removida primeiro (ou ambos), na maioria dos casos, você ainda poderá descartar o banco de dados usando ALTER DATABASE para definir o banco de dados offline e, em seguida, descartá-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 (SQL Server).

Limitações

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

A DROP DATABASE instrução deve ser executada no modo de confirmação automática e não é permitida em 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 descartar um banco de dados que está sendo usado no momento. Isso significa que os bloqueios para leitura ou gravação estão sendo mantidos por qualquer usuário. Uma maneira 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 o ALTER DATABASE e DROP DATABASE no mesmo lote, para evitar que outra conexão reivindique que a sessão de usuário único é permitida. Para obter mais informações, consulte o Exemplo D.

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.

Descartar uma habilitação de banco de dados para o Stretch Database não remove 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 master banco de dados para descartar um banco de dados.

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

Azure Synapse Analytics

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

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

Permissões

SQL Server

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

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)

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

Exemplos

R. Descartar um único banco de dados

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

DROP DATABASE Sales;

B. Descartar vários bancos de dados

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

DROP DATABASE Sales, NewSales;

C. Descartar um instantâneo de banco de dados

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. Descartar 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 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