MSSQL Server データベースを強制的に削除する方法

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 (Administrator)」も接続されていません。 「master」にログインしていることを確認しました。

現在使用中であると表示されるのはなぜですか。このデータベースを削除するには、ファイル システムからディレクトリなどを削除することは可能ですか?

ご協力いただければ幸いです。

ありがとう。

答え1

オブジェクト エクスプローラーでデータベースをクリックしただけで、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

答え2

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

答え3

SSMS で削除する場合、「既存の接続を閉じる」というチェックボックスがあります。このチェックボックスはデフォルトではチェックされていません。チェックボックスをオンにすると、DB への接続がすべて終了し、削除できるようになります。

関連情報