
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
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.