
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
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 への接続がすべて終了し、削除できるようになります。