programing

데이터베이스가 현재 사용 중이므로 삭제할 수 없습니다.

showcode 2023. 4. 15. 09:41
반응형

데이터베이스가 현재 사용 중이므로 삭제할 수 없습니다.

데이터베이스를 삭제하려고 합니다.아래 코드를 사용했지만 소용이 없었습니다.

public void DropDataBase(string DBName,SqlConnection scon)
{
    try
    {
        SqlConnection.ClearAllPools();
        SqlCommand cmd = new SqlCommand("ALTER DATABASE " + DBName + "     SET SINGLE_USER     WITH ROLLBACK IMMEDIATE", scon);
        cmd.CommandType = CommandType.Text;
        scon.Open();
        cmd.ExecuteNonQuery();
        scon.Close();

        SqlCommand cmddrpdb = new SqlCommand("drop database " + DBName + "", scon);
        cmddrpdb.CommandType = CommandType.Text;
        scon.Open();
        cmddrpdb.ExecuteNonQuery();
        scon.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show("DropDataBase : " +ex.Message);
    }
}

현재 사용 중이므로 데이터베이스를 드롭할 수 없습니다.에러가 표시됩니다.상기의 건을 도와 주세요.

데이터베이스를 삭제하기 전에 먼저 대상 데이터베이스에 대한 모든 연결을 삭제해야 합니다.

http://www.kodyaz.com/articles/kill-all-processes-of-a-database.aspx에서 해결책을 찾았습니다.

DECLARE @DatabaseName nvarchar(50)
SET @DatabaseName = N'YOUR_DABASE_NAME'

DECLARE @SQL varchar(max)

SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';'
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId

--SELECT @SQL 
EXEC(@SQL)

너무 늦었지만 미래의 사용자에게 유용할 수 있습니다.

데이터베이스 쿼리를 삭제하기 전에 다음 쿼리를 사용할 수 있습니다.

 use master go
 alter database [MyDatbase] set single_user with rollback immediate

 drop database [MyDatabase]

그건 작동할 것이다.를 참조할 수도 있습니다.

sql 스크립트에서 "기존 연결 닫기"를 지정하려면 어떻게 해야 합니까?

도움이 되었으면 합니다:)

누군가가 데이터베이스에 연결되었습니다.다른 데이터베이스로 전환한 후 드롭합니다.

해라

SP_WHO 연결되었는지

★★★★★★★★★★★★★★★★★」KILL

SQL Server management. studio의 경우:

마우스 오른쪽 버튼 데이터베이스:[속성] -> [옵션] -> [액세스 제한] : [싱글 사용자]로 설정하고 나서 드롭을 실행합니다.

SQL Server Management Studio 2016에서 다음을 수행하십시오.

  • 데이터베이스를 오른쪽 클릭합니다.

  • [삭제] 를 누릅니다.

  • 기존 연결 닫기 확인

  • 삭제 조작을 실행하다

select * from sys.sysprocesses where dbid = DB_ID('Test')

('테스트'를 삭제하려는 데이터베이스 이름으로 바꿉니다.)그러면 어떤 프로세스가 이를 사용하고 있는지 알 수 있습니다.

그래도 강제 폐기를 원하는 경우 궁극적인 접근법은 다음과 같습니다.

USE master;
GO
ALTER DATABASE Test 
SET SINGLE_USER 
WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE Test;

이게 도움이 되길 바래!

먼저 데이터베이스를 분리한 후 오프라인으로 전환합니다.

Use Master
GO
ALTER DATABASE dbname SET OFFLINE
GO
EXEC sp_detach_db 'dbname', 'true'

SQL Management Studio에서 데이터베이스를 드롭하고 메시지를 받은 경우 마스터를 선택한 데이터베이스로 사용하는 것을 잊지 마십시오. 그렇지 않으면 쿼리가 데이터베이스에 대한 연결이기도 합니다.

USE Master;
GO
DROP DATABASE AdventureWorks;
GO

먼저 연결된 데이터베이스를 확인합니다.

SP_WHO

두 번째 데이터베이스 연결 끊기

DECLARE @DatabaseName nvarchar(50)
SET @DatabaseName = N'your_database_name'

DECLARE @SQL varchar(max)

SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';'
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId

--SELECT @SQL 
EXEC(@SQL)

드디어 그만두다

drop database your_database

무차별적인 회피책은 다음과 같습니다.

  1. SQL Server 서비스를 중지합니다.

  2. 대응하는 .mdf 및 .ldf 파일을 삭제합니다.

  3. SQL Server 서비스를 시작합니다.

  4. SSMS에 접속하여 데이터베이스를 삭제합니다.

저는 아래의 두 가지 답변에서 파생된 스크립트를 사용했다고 말하고 싶었습니다.

@Hitesh Mistry와 @unruledboy에게 보내는 소품

DECLARE @DatabaseName nvarchar(50)
SET @DatabaseName = N'[[[DatabaseName]]]'

DECLARE @SQL varchar(max)

SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';'
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId

EXEC(@SQL)

alter database [[[DatabaseName]]] set single_user with rollback immediate

DROP DATABASE [[[DatabaseName]]]

MS SQL Server 2008을 사용하여 DELETE 대화 상자(접속 닫기 옵션 포함)에서 생성된 스크립트는 다음과 같습니다.이것이 최선이라고 생각합니다.

EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'YOUR_DATABASE_NAME'
GO
USE [master]
GO
ALTER DATABASE [YOUR_DATABASE_NAME] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
/****** Object:  Database [YOUR_DATABASE_NAME]    Script Date: 01/08/2014 21:36:29 ******/
DROP DATABASE [YOUR_DATABASE_NAME]
GO

vb.net (변환하고 싶은 경우 c언어와 마찬가지로)를 제공하고 싶습니다.프로그램 중 하나를 설치하지 않은 경우에도 비슷한 문제가 있었습니다.DB를 삭제하는 것은 조금 까다로웠습니다.Express를 사용하여 서버에 접속할 수 있었지만, 몇 번을 둘러봐도 완벽한 코드를 얻을 수 있었던 것은 아닙니다.

    Sub DropMyDatabase()
    Dim Your_DB_To_Drop_Name As String = "YourDB"
    Dim Your_Connection_String_Here As String = "SERVER=MyServer;Integrated Security=True"
    Dim Conn As SqlConnection = New SqlConnection(Your_Connection_String_Here)

    Dim AlterStr As String = "ALTER DATABASE " & Your_DB_To_Drop_Name & " SET OFFLINE WITH ROLLBACK IMMEDIATE"
    Dim AlterCmd = New SqlCommand(AlterStr, Conn)

    Dim DropStr As String = "DROP DATABASE " & Your_DB_To_Drop_Name
    Dim DropCmd = New SqlCommand(DropStr, Conn)

    Try
        Conn.Open()
        AlterCmd.ExecuteNonQuery()
        DropCmd.ExecuteNonQuery()
        Conn.Close()

    Catch ex As Exception
        If (Conn.State = ConnectionState.Open) Then
            Conn.Close()
        End If
        MsgBox("Failed... Sorry!" & vbCrLf & vbCrLf & ex.Message)
    End Try
End Sub

xChickenx를 찾는 모든 사람에게 도움이 되길 바랍니다.

업데이트 이 컨버터를 사용하는 것은 C# 버전입니다.

public void DropMyDatabase()
    {
        var Your_DB_To_Drop_Name = "YourDB";
        var Your_Connection_String_Here = "SERVER=MyServer;Integrated Security=True";
        var Conn = new SqlConnection(Your_Connection_String_Here);

        var AlterStr = "ALTER DATABASE " + Your_DB_To_Drop_Name + " SET OFFLINE WITH ROLLBACK IMMEDIATE";
        var AlterCmd = new SqlCommand(AlterStr, Conn);

        var DropStr = "DROP DATABASE " + Your_DB_To_Drop_Name;
        var DropCmd = new SqlCommand(DropStr, Conn);

        try
        {
            Conn.Open();
            AlterCmd.ExecuteNonQuery();
            DropCmd.ExecuteNonQuery();
            Conn.Close();

        }
        catch(Exception ex)
        {
            if((Conn.State == ConnectionState.Open))
            {
                Conn.Close();
            }
            Trace.WriteLine("Failed... Sorry!" + Environment.NewLine + ex.Message);
        }
    }

실행 중인 데이터베이스를 삭제하려면 이 배치 파일을 사용할 수 있습니다.

@echo off

set /p dbName= "Enter your database name to drop: " 

echo Setting to single-user mode
sqlcmd -Q "ALTER DATABASE [%dbName%] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE"

echo Dropping...
sqlcmd -Q "drop database %dbName%"

echo Completed.

pause

화면.

현재 사용 중인 데이터베이스는 삭제할 수 없지만 사용할 수 있습니다.sp_detach_db데이터베이스 파일을 삭제하지 않고 서버에서 데이터베이스를 제거하려면 저장 프로시저를 선택합니다.

DB 이름만 바꾸면 (삭제할) 효과가 있었어요.데이터베이스에 접속하고 있는 프로세스에서 손을 뗐기 때문에 데이터베이스를 삭제할 수 있었습니다.

사용 가능한 데이터베이스 섹션으로 이동하여 마스터를 선택합니다.그런 다음 데이터베이스 드롭을 시도합니다.DB_name.

사용방법:

/* Delete Database Backup and Restore History from MSDB System Database */
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'[dba]'
GO

/* Query to Get Exclusive Access of SQL Server Database before Dropping the Database  */
USE [master]
GO

ALTER DATABASE [dba]

SET SINGLE_USER
WITH

ROLLBACK IMMEDIATE
GO

/* Query to Drop Database in SQL Server  */
DROP DATABASE [dba]
GO

SSMS UI에서 DB를 삭제하면 이 DB에 대한 모든 연결도 끊어집니다.

SSMS 상단에서 마스터로 데이터베이스를 전환한 후 DB 이름으로 drop database를 작성하면 완벽하게 작동했습니다.문제는 DB를 드롭하고 싶은 DB와 같은 이름으로 설정했기 때문에 현재 사용하고 있는 것입니다!

언급URL : https://stackoverflow.com/questions/7469130/cannot-drop-database-because-it-is-currently-in-use

반응형