Como forçar uma queda do banco de dados MSSQL Server

Como forçar uma queda do banco de dados MSSQL Server

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

Dehttp://www.morgantechspace.com/2013/11/Cannot-drop-database-porque-it-is-currently-in-use-in-MS-SQL-Server.html

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.

informação relacionada