현재 사용 중이므로 데이터베이스를 삭제할 수 없습니다.
데이터베이스를 삭제하고 싶습니다. 다음 코드를 사용했지만 아무 소용이 없습니다.
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);
}
}
현재 사용 중이므로 데이터베이스를 삭제할 수 없으므로 오류 가 발생합니다 . 위에서 언급 한 문제에서 저를 도와주세요.
누군가가 데이터베이스에 연결했습니다. 다른 데이터베이스로 전환 한 다음 삭제하십시오.
시험
SP_WHO
누가 연결했는지보기 위해
그리고 KILL
필요한 경우
데이터베이스를 삭제하기 전에 먼저 해당 데이터베이스에 대한 연결을 삭제합니다.
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)
SQL 서버 관리의 경우. 사진관:
데이터베이스를 마우스 오른쪽 단추로 클릭하십시오. 속성-> 옵션-> 액세스 제한 : "단일 사용자"로 설정하고 나중에 드롭을 수행하십시오.
너무 늦었지만 향후 사용자에게 유용 할 수 있습니다.
데이터베이스 쿼리를 삭제하기 전에 아래 쿼리를 사용할 수 있습니다.
alter database [MyDatbase] set single_user with rollback immediate
drop database [MyDatabase]
작동합니다. 참조 할 수도 있습니다.
SQL 스크립트에서 "기존 연결 닫기"를 지정하는 방법
나는 그것이 당신을 도울 것입니다 :)
SQL Server Management Studio 2016에서 다음을 수행합니다.
데이터베이스를 마우스 오른쪽 버튼으로 클릭하십시오.
삭제를 클릭하십시오.
기존 연결 닫기 확인
삭제 작업 수행
select * from sys.sysprocesses where dbid = DB_ID('Test')
( 'Test'를 삭제하려는 데이터베이스 이름으로 바꿉니다.) 이렇게하면 어떤 프로세스가이를 사용하고 있는지 알 수 있습니다.
그래도 강제 드롭을 원한다면 궁극적 인 접근 방식은 다음과 같습니다.
USE master;
GO
ALTER DATABASE Test
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE Test;
도움이 되었기를 바랍니다 !
SQL Management Studio에서 데이터베이스를 삭제하고 메시지를 받으면 Master를 선택한 데이터베이스로 사용하는 것을 잊지 마십시오. 그렇지 않으면 쿼리가 데이터베이스에 대한 연결이기도합니다.
USE Master;
GO
DROP DATABASE AdventureWorks;
GO
먼저 분리 후 데이터베이스를 오프라인으로 만드십시오.
Use Master
GO
ALTER DATABASE dbname SET OFFLINE
GO
EXEC sp_detach_db 'dbname', 'true'
무차별 대입 해결 방법은 다음과 같습니다.
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]]]
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를 찾는 사람에게 도움이되기를 바랍니다.
UPDATE 사용 이 여기 컨버터는 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);
}
}
You cannot drop a database currently being used however you can use sp_detach_db
stored procedure if you want to remove a database from the server without deleting the database files.
just renaming the DB (to be delete) did the trick for me. it got off the hold of whatever process was accessing the database, and so I was able to drop the database.
Using MS SQL Server 2008, in DELETE dialog with Close connection options, this is the generated script, I guess it is the best:
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
Go to available databases section and select master. Then Try DROP DATABASE the_DB_name.
참고URL : https://stackoverflow.com/questions/7469130/cannot-drop-database-because-it-is-currently-in-use
'Nice programing' 카테고리의 다른 글
Android Textview 개요 텍스트 (0) | 2020.10.22 |
---|---|
iPhone에서 투명한 PNG 이미지에 색조를 지정하는 방법은 무엇입니까? (0) | 2020.10.22 |
Xcode 6 및 10.10 Yosemite가 포함 된 Cocoapods (0) | 2020.10.22 |
컨텐츠 편집 가능한 엔티티의 끝으로 커서를 이동하는 방법 (0) | 2020.10.22 |
UICollectionViewController에서 당겨서 새로 고침 (0) | 2020.10.22 |