
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(관리자)"도 연결되어 있지 않습니다. "마스터"로 로그인했는지 확인했습니다.
현재 사용 중이라고 말하는 이유는 무엇입니까? 이 데이터베이스를 제거하기 위해 파일 시스템에서 디렉토리나 다른 항목을 삭제할 수 있습니까?
어떤 도움이라도 주시면 감사하겠습니다.
감사해요.
답변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에 대한 모든 연결이 종료되어 삭제할 수 있습니다.