Eu tenho um banco de dados SQL Server 2014 onde o arquivo de log preencheu o disco. Como era um banco de dados de teste, decidimos apenas excluir todo o banco de dados. Nós o colocamos offline, mas quando tentamos descartá-lo, recebemos uma mensagem de que ele não pode ser descartado, pois está em uso.
Como pode estar em uso quando está offline? Como posso derrubá-lo? (Preferível sem levá-lo online.)
O problema era que a pessoa que configurou o banco de dados para OFFLINE também o configurou para SINGLE_USER, e sua sessão ainda estava aberta e "usando" o banco de dados, mesmo que estivesse OFFLINE. Quando ele encerrou a sessão, conseguimos descartar o banco de dados.
Thx a todos nos comentários para ajudar.
O problema que você viu foi, na verdade, porque outro spid mantinha um bloqueio "SHARED_TRANSACTION_WORKSPACE" no dbcat (catálogo de banco de dados). No seu caso, você pode ter visto esse bloqueio executando this
SELECT DB_NAME(resource_database_id) AS DbcatName, * FROM sys.dm_tran_locks;
ou thisEXEC sp_lock NULL;
.Aqui estão algumas coisas que aprendi (ainda é verdade no Sql2019):
Pela minha experiência, se um dbcat estiver no modo de usuário único no momento em que um spid o colocar OFFLINE, seu bloqueio compartilhado nesse dbcat não será liberado até que também
Então este é o padrão que eu sigo agora: