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(관리자)"도 연결되어 있지 않습니다. "마스터"로 로그인했는지 확인했습니다.

현재 사용 중이라고 말하는 이유는 무엇입니까? 이 데이터베이스를 제거하기 위해 파일 시스템에서 디렉토리나 다른 항목을 삭제할 수 있습니까?

어떤 도움이라도 주시면 감사하겠습니다.

감사해요.

답변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에 대한 모든 연결이 종료되어 삭제할 수 있습니다.

관련 정보