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

4

Estou tentando excluir um banco de dados do 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 sobre ele e deletá-lo.

Isso não funciona, ele me diz "Não é possível descartar o banco de dados" ima_debts "porque ele está atualmente em uso". O problema é que não há nenhum outro usuário conectado a ele. Na verdade, desabilitei o TCP / IP para o banco de dados e o reiniciei.

Nem mesmo "Microsoft SQL Server Management Studio (Administrador)" está conectado a ele. Eu me certifiquei de fazer o login para "master".

Por que isso está me dizendo que está em uso atualmente? É 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.

    
por ng01 19.10.2012 / 02:02

3 respostas

3

Às vezes, o IntelliSense e / ou o Management Studio bloquearão as conexões abertas apenas porque você clicou no banco de dados no Pesquisador de Objetos. Além disso, se você tiver algum trabalho do SQL Agent que acessa o banco de dados, eles não serão interrompidos desativando o TCP / IP.

Independentemente disso, o script a seguir "assumirá" o banco de dados colocando-o no modo de usuário único na sessão e, em seguida, o colocará offline para que ninguém possa se conectar a ele para executar consultas.

Você pode soltar o banco de dados usando o Management Studio ou o T-SQL.

USE [MyDB];
GO

ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

ALTER DATABASE [MyDB] SET OFFLINE;
GO
    
por 19.10.2012 / 02:39
2

De link

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();
    }
}
    
por 02.12.2013 / 18:13
0

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ê as exclua.

    
por 19.10.2012 / 05:32

Tags