
Estou tentando excluir um banco de dados MSSQL Server, mas não estou tendo sorte. Eu tentei várias coisas, como
user
ALTER DATABASE my_database
SET RESTRICTED_USER
WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE my_database;
GO
Eu também tentei clicar com o botão direito nele e excluí-lo.
Isso não funciona, diz "Não é possível descartar o banco de dados "ima_debts" porque está em uso no momento". O problema é que definitivamente não há outro usuário conectado a ele. Na verdade, desabilitei o TCP/IP do banco de dados e o reiniciei.
Nem mesmo o "Microsoft SQL Server Management Studio (Administrador)" está conectado a ele. Certifiquei-me de fazer login em "master".
Por que está me dizendo que está em uso no momento. É possível excluir talvez um diretório ou algo do sistema de arquivos para me livrar desse banco de dados?
Qualquer ajuda seria apreciada.
Obrigado.
Responder1
Às vezes, o IntelliSense e/ou o Management Studio travam as conexões abertas apenas porque você clicou no banco de dados no Object Explorer. Além disso, se você tiver algum trabalho do SQL Agent que acesse o banco de dados, ele não será interrompido pela desativação do TCP/IP.
Independentemente disso, o script a seguir irá "assumir o controle" do banco de dados, colocando-o no modo de usuário único na sessão e, em seguida, colocando-o offline para que ninguém possa se conectar a ele para executar consultas.
Você pode então eliminar o banco de dados usando Management Studio ou T-SQL.
USE [MyDB];
GO
ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [MyDB] SET OFFLINE;
GO
Responder2
USE [master]
GO
ALTER DATABASE [TestDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
/****** Object: Database [TestDB] Script Date: 11/29/2013 13:40:36 ******/
DROP DATABASE [TestDB]
GO
Em C#
public static void DeleteDataBase()
{
using (SqlConnection sqlconnection = new
SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=SSPI;"))
{
sqlconnection.Open();
// if you used master db as Initial Catalog, there is no need to change database
sqlconnection.ChangeDatabase("master");
string rollbackCommand = @"ALTER DATABASE [TestDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
SqlCommand deletecommand = new SqlCommand(rollbackCommand, sqlconnection);
deletecommand.ExecuteNonQuery();
string deleteCommand = @"DROP DATABASE [TestDB]";
deletecommand = new SqlCommand(deleteCommand, sqlconnection);
deletecommand.ExecuteNonQuery();
}
}
Responder3
Quando você o exclui no SSMS, há uma caixa de seleção que diz "Fechar conexões existentes". Esta caixa de seleção não está marcada por padrão. Marque a caixa e todas as conexões com o banco de dados serão encerradas, permitindo que você o exclua.