DROP DATABASE(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
SQL Server 데이터베이스 엔진 인스턴스에서 하나 이상의 사용자 데이터베이스 또는 데이터베이스 스냅샷을 제거합니다.
구문
SQL Server 구문입니다.
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ]
[ ; ]
Azure SQL Database, Azure Synapse Analytics 및 Analytics Platform System 구문.
DROP DATABASE database_name
[ ; ]
인수
IF EXISTS
적용 대상: SQL Server 2016(13.x) 이상 버전
이미 있는 경우에만 데이터베이스를 조건부로 삭제합니다.
database_name
제거할 데이터베이스의 이름을 지정합니다. 데이터베이스 목록을 표시하려면 sys.databases 카탈로그 뷰를 사용합니다.
database_snapshot_name
제거할 데이터베이스 스냅샷의 이름을 지정합니다.
설명
데이터베이스는 오프라인, 읽기 전용 및 주의 대상과 같은 상태에 관계없이 삭제할 수 있습니다. 데이터베이스의 현재 상태를 표시하려면 카탈로그 뷰를 sys.databases
사용합니다.
삭제된 데이터베이스는 백업 복원을 통해서만 다시 만들 수 있습니다. 데이터베이스 스냅샷은 백업할 수 없으므로 복원할 수 없습니다.
데이터베이스가 삭제될 때마다 master database를 백업해야 합니다.
데이터베이스를 삭제하면 SQL Server 인스턴스에서 데이터베이스가 삭제되며 데이터베이스가 사용하는 물리적 디스크 파일도 삭제됩니다. 데이터베이스 또는 해당 파일 중 하나가 삭제될 때 오프라인 상태이면 디스크 파일은 삭제되지 않습니다. 이러한 파일은 파일 탐색기 같은 파일 관리자를 사용하여 수동으로 삭제할 수 있습니다. 파일 시스템에서 파일을 삭제하지 않고 현재 서버에서 데이터베이스를 제거하려면 sp_detach_db를 사용합니다.
Warning
SQL Server 2016(13.x) 이상 버전에서는 연결된 백업이 있는 FILE_SNAPSHOT
데이터베이스를 삭제하는 데 성공하지만, 이러한 데이터베이스 파일을 참조하는 백업이 무효화되지 않도록 연결된 스냅샷이 있는 데이터베이스 파일은 삭제되지 않습니다. 파일은 잘리지만 백업을 그대로 유지하기 FILE_SNAPSHOT
위해 물리적으로 삭제되지는 않습니다. 자세한 내용은 Azure Blob Storage를 사용하여 SQL Server 백업 및 복원을 참조 하세요.
SQL Server
데이터베이스 스냅샷을 삭제하면 SQL Server 인스턴스에서 데이터베이스 스냅샷이 삭제되고 스냅샷에 사용되는 실제 NTFS 파일 시스템 스파스 파일이 삭제됩니다. 데이터베이스 스냅샷으로 스파스 파일을 사용하는 방법에 대한 자세한 내용은 데이터베이스 스냅샷(SQL Server)을 참조하세요. 데이터베이스 스냅샷을 삭제하면 인스턴스 전체가 아니라 데이터베이스 스냅샷과 연결된 계획 캐시의 항목이 지워지게 됩니다. 계획 캐시를 삭제하면 모든 후속 실행 계획이 다시 컴파일되며 일시적으로 갑자기 쿼리 성능이 저하될 수 있습니다.
계획 캐시의 지워진 각 cachestore에 대해 SQL Server 오류 로그에는 다음 정보 메시지가 포함됩니다. 이 메시지는 캐시가 해당 시간 간격 내에 플러시되는 동안 5분마다 기록됩니다.
SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.
상호 운용성
SQL Server
트랜잭션 복제를 위해 게시된 데이터베이스 또는 병합 복제를 위해 게시 또는 구독된 데이터베이스를 삭제하려면 먼저 데이터베이스에서 복제를 제거해야 합니다. 데이터베이스가 손상되었거나 복제를 먼저 제거할 수 없는 경우(또는 둘 다) 대부분의 경우 데이터베이스를 오프라인으로 설정한 다음 삭제하여 데이터베이스 ALTER DATABASE
를 삭제할 수 있습니다.
데이터베이스에서 로그 전달 작업을 수행하고 있는 경우 데이터베이스를 삭제하기 전에 로그 전달을 제거하세요. 자세한 내용은 로그 전달 정보(SQL Server)를 참조하세요.
제한 사항
시스템 데이터베이스는 삭제할 수 없습니다.
문은 DROP DATABASE
자동 커밋 모드에서 실행되어야 하며 명시적 또는 암시적 트랜잭션에서는 허용되지 않습니다. 자동 커밋 모드는 기본 트랜잭션 관리 모드입니다.
Warning
현재 사용 중인 데이터베이스는 삭제할 수 없습니다. 즉, 모든 사용자의 읽기 또는 쓰기 잠금이 유지됩니다. 데이터베이스에서 사용자를 제거하는 한 가지 방법은 데이터베이스를 ALTER DATABASE
SINGLE_USER 설정하는 것입니다. 이 전략에서는 단일 사용자 세션을 주장하는 다른 연결을 방지하기 위해 동일한 일괄 처리로 실행 ALTER DATABASE
DROP DATABASE
해야 합니다. 자세한 내용은 예제 D를 참조하세요.
SQL Server
데이터베이스를 삭제하려면 먼저 데이터베이스의 모든 데이터베이스 스냅샷을 삭제해야 합니다.
Stretch Database에 사용할 수 있는 데이터베이스를 삭제해도 원격 데이터는 제거되지 않습니다. 원격 데이터를 삭제하려면 수동으로 제거해야 합니다.
Important
Stretch Database는 SQL Server 2022(16.x) 및 Azure SQL 데이터베이스에서 사용되지 않습니다. 데이터베이스 엔진의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.
Azure SQL Database
데이터베이스를 삭제하려면 데이터베이스에 master
연결해야 합니다.
이 문은 DROP DATABASE
SQL 일괄 처리의 유일한 문이어야 하며 한 번에 하나의 데이터베이스만 삭제할 수 있습니다.
Azure Synapse Analytics
데이터베이스를 삭제하려면 데이터베이스에 master
연결해야 합니다.
이 문은 DROP DATABASE
SQL 일괄 처리의 유일한 문이어야 하며 한 번에 하나의 데이터베이스만 삭제할 수 있습니다.
사용 권한
SQL Server
데이터베이스에 CONTROL
대한 사용 권한 또는 ALTER ANY DATABASE
사용 권한 또는 db_owner 고정 데이터베이스 역할의 멤버 자격이 필요합니다.
Azure SQL Database
프로비전 프로세스를 통해 만들어진 서버 수준의 보안 주체 로그인 또는 dbmanager 데이터베이스 역할의 멤버만 데이터베이스를 삭제할 수 있습니다.
분석 플랫폼 시스템(PDW)
데이터베이스에 CONTROL
대한 사용 권한 또는 ALTER ANY DATABASE
사용 권한 또는 db_owner 고정 데이터베이스 역할의 멤버 자격이 필요합니다.
예제
A. 단일 데이터베이스 삭제
다음 예에서는 Sales
데이터베이스를 제거합니다.
DROP DATABASE Sales;
B. 여러 데이터베이스 삭제
다음 예에서는 목록의 데이터베이스 각각을 제거합니다.
DROP DATABASE Sales, NewSales;
C. 데이터베이스 스냅샷 삭제
다음 예에서는 원본 데이터베이스에 영향을 주지 않으면서 sales_snapshot0600
이라는 이름의 데이터베이스 스냅샷을 삭제합니다.
DROP DATABASE sales_snapshot0600;
D. 데이터베이스가 있는지 확인한 후 데이터베이스 삭제
다음 예제에서는 먼저 Sales
라는 데이터베이스가 있는지 확인합니다. 데이터베이스가 있으면 예제에서는 Sales
라는 데이터베이스를 단일 사용자 모드로 변경하여 다른 모든 세션의 연결을 강제로 끊은 다음, 데이터베이스를 삭제합니다. SINGLE_USER에 대한 자세한 내용은 ALTER DATABASE SET 옵션을 참조하세요.
USE tempdb;
GO
DECLARE @SQL AS NVARCHAR (1000);
IF EXISTS (SELECT 1
FROM sys.databases
WHERE [name] = N'Sales')
BEGIN
SET @SQL = N'USE [Sales];
ALTER DATABASE Sales SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
USE [tempdb];
DROP DATABASE Sales;';
EXECUTE (@SQL);
END