Cómo forzar una caída de la base de datos del servidor MSSQL

Cómo forzar una caída de la base de datos del servidor MSSQL

Estoy intentando eliminar una base de datos del servidor MSSQL, pero no tengo suerte. He probado varias cosas como

user
ALTER DATABASE my_database
SET RESTRICTED_USER
WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE my_database;
GO

También intenté hacer clic derecho sobre él y eliminarlo.

Esto no funciona, me dice "No se puede eliminar la base de datos "ima_debts" porque actualmente está en uso". El caso es que definitivamente no hay ningún otro usuario conectado a él. De hecho, desactivé TCP/IP para la base de datos y la reinicié.

Ni siquiera "Microsoft SQL Server Management Studio (Administrador)" está conectado. Me aseguré de iniciar sesión en "master".

¿Por qué me dice que está actualmente en uso? ¿Puedo eliminar quizás un directorio o algo del sistema de archivos para deshacerme de esta base de datos?

Cualquier ayuda sería apreciada.

Gracias.

Respuesta1

A veces, IntelliSense y/o Management Studio bloquearán las conexiones abiertas solo porque hizo clic en la base de datos en el Explorador de objetos. Además, si tiene trabajos del Agente SQL que acceden a la base de datos, estos no se detendrán al deshabilitar TCP/IP.

Independientemente, el siguiente script "se hará cargo" de la base de datos colocándola en modo de usuario único en la sesión y luego la desconectará para que nadie pueda conectarse a ella para ejecutar consultas.

Luego puede eliminar la base de datos usando Management Studio o T-SQL.

USE [MyDB];
GO

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

ALTER DATABASE [MyDB] SET OFFLINE;
GO

Respuesta2

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

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();
    }
}

Respuesta3

Cuando lo elimina en SSMS, hay una casilla de verificación que dice "Cerrar conexiones existentes". Esta casilla de verificación no está marcada de forma predeterminada. Marque la casilla y se cancelará cualquier conexión a la base de datos, lo que le permitirá eliminarla.

información relacionada