데이터베이스가 현재 사용 중이므로 삭제할 수 없습니다.
데이터베이스를 삭제하려고 합니다.아래 코드를 사용했지만 소용이 없었습니다.
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
무차별적인 회피책은 다음과 같습니다.
SQL Server 서비스를 중지합니다.
대응하는 .mdf 및 .ldf 파일을 삭제합니다.
SQL Server 서비스를 시작합니다.
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
'programing' 카테고리의 다른 글
워크시트 함수의 셀, 열 및 행에 대한 자체 참조 (0) | 2023.04.15 |
---|---|
SQLBulkCopy에 권장되는 배치 크기는 어떻게 됩니까? (0) | 2023.04.15 |
응용 프로그램에서 stdout을 파이프가 아닌 터미널로 생각하도록 속이는 무엇입니까? (0) | 2023.04.15 |
TabControl의 탭 항목 내 제어 상태를 유지하는 방법 (0) | 2023.04.15 |
AVFundation AVPlayer를 사용한 비디오 루프 (0) | 2023.04.15 |