So erzwingen Sie das Löschen einer MSSQL Server-Datenbank

So erzwingen Sie das Löschen einer MSSQL Server-Datenbank

Ich versuche, eine MSSQL Server-Datenbank zu löschen, habe jedoch kein Glück. Ich habe mehrere Dinge ausprobiert, wie zum Beispiel

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

Ich habe auch versucht, mit der rechten Maustaste darauf zu klicken und es zu löschen.

Das funktioniert nicht, es wird mir angezeigt: „Datenbank „ima_debts“ kann nicht gelöscht werden, da sie derzeit verwendet wird.“ Die Sache ist, dass definitiv kein anderer Benutzer damit verbunden ist. Tatsächlich habe ich TCP/IP für die Datenbank deaktiviert und sie neu gestartet.

Nicht einmal „Microsoft SQL Server Management Studio (Administrator)“ ist damit verbunden. Ich habe darauf geachtet, mich als „Master“ anzumelden.

Warum wird mir angezeigt, dass die Datenbank derzeit verwendet wird? Kann ich vielleicht ein Verzeichnis oder etwas anderes aus dem Dateisystem löschen, um diese Datenbank loszuwerden?

Jede Hilfe wäre willkommen.

Danke.

Antwort1

Manchmal halten IntelliSense und/oder Management Studio Verbindungen offen, nur weil Sie im Objekt-Explorer auf die Datenbank geklickt haben. Auch wenn Sie SQL Agent-Jobs haben, die auf die Datenbank zugreifen, werden diese durch das Deaktivieren von TCP/IP nicht gestoppt.

Unabhängig davon wird das folgende Skript die Datenbank „übernehmen“, indem es sie in der Sitzung in den Einzelbenutzermodus versetzt und sie dann offline nimmt, sodass sich niemand mit ihr verbinden kann, um Abfragen auszuführen.

Sie können die Datenbank dann mit Management Studio oder T-SQL löschen.

USE [MyDB];
GO

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

ALTER DATABASE [MyDB] SET OFFLINE;
GO

Antwort2

Aushttp://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

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

Antwort3

Wenn Sie es in SSMS löschen, gibt es ein Kontrollkästchen mit der Aufschrift „Vorhandene Verbindungen schließen“. Dieses Kontrollkästchen ist standardmäßig nicht aktiviert. Aktivieren Sie das Kontrollkästchen und alle Verbindungen zur Datenbank werden beendet, sodass Sie sie löschen können.

verwandte Informationen