Назад | Перейти на главную страницу

Как принудительно удалить базу данных MSSQL Server

Я пытаюсь удалить базу данных MSSQL Server, но мне не повезло. Я пробовал несколько вещей, например

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

Я также попытался щелкнуть по нему правой кнопкой мыши и удалить.

Это не работает, это говорит мне "Невозможно удалить базу данных" ima_debts ", потому что она в настоящее время используется". Дело в том, что к нему точно не подключен другой пользователь. Фактически я отключил TCP / IP для базы данных и перезапустил ее.

К нему не подключена даже «Microsoft SQL Server Management Studio (администратор)». Я убедился, что вошел в "master".

Почему он говорит мне, что сейчас используется? Могу ли я удалить каталог или что-то из файловой системы, чтобы избавиться от этой базы данных?

Любая помощь будет оценена.

Спасибо.

Иногда IntelliSense и / или Management Studio будут зависать от открытия соединений только потому, что вы щелкнули базу данных в обозревателе объектов. Кроме того, если у вас есть задания агента SQL, которые обращаются к базе данных, они не будут остановлены путем отключения TCP / IP.

Тем не менее, следующий сценарий «возьмет на себя» базу данных, переведя ее в однопользовательский режим в сеансе, а затем переведет ее в автономный режим, чтобы никто не мог подключиться к ней для выполнения запросов.

Затем вы можете удалить базу данных с помощью Management Studio или T-SQL.

USE [MyDB];
GO

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

ALTER DATABASE [MyDB] SET OFFLINE;
GO

Из http://www.morgantechspace.com/2013/11/Cannot-drop-database-because-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();
    }
}

Когда вы удаляете его в SSMS, появляется флажок «Закрыть существующие подключения». По умолчанию этот флажок не установлен. Установите этот флажок, и любые соединения с БД будут прерваны, и вы сможете их удалить.