DROP DATABASE(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

SQL Server 인스턴스에서 하나 이상의 사용자 데이터베이스 또는 데이터베이스 스냅샷을 제거합니다.

Transact-SQL 구문 표기 규칙

Syntax

-- SQL Server Syntax
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ] [;]
-- Azure SQL Database, Azure Synapse Analytics and Analytics Platform System Syntax
DROP DATABASE database_name [;]

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

IF EXISTS
적용 대상: SQL Server (SQL Server 2016(13.x) ~ 현재 버전).

이미 있는 경우에만 데이터베이스를 조건부로 삭제합니다.

database_name 제거할 데이터베이스의 이름을 지정합니다. 데이터베이스 목록을 표시하려면 sys.databases 카탈로그 뷰를 사용합니다.

database_snapshot_name적용 대상: SQL Server 2008(10.0.x) 이상

제거할 데이터베이스 스냅샷의 이름을 지정합니다.

일반적인 주의 사항

데이터베이스는 오프라인, 읽기 전용 및 주의 대상과 같은 상태에 관계없이 삭제할 수 있습니다. 데이터베이스의 현재 상태를 표시하려면 sys.databases 카탈로그 뷰를 사용합니다.

삭제된 데이터베이스는 백업 복원을 통해서만 다시 만들 수 있습니다. 데이터베이스 스냅샷은 백업할 수 없으므로 복원할 수 없습니다.

데이터베이스가 삭제될 때마다 master database를 백업해야 합니다.

데이터베이스를 삭제하면 SQL Server 인스턴스에서 데이터베이스가 삭제되며 데이터베이스가 사용하는 물리적 디스크 파일도 삭제됩니다. 삭제 시 데이터베이스 또는 해당 데이터베이스의 파일 중 하나가 오프라인 상태이면 디스크 파일은 삭제되지 않습니다. 이 파일은 Windows 탐색기를 사용해 수동으로 삭제할 수 있습니다. 파일 시스템에서 파일을 삭제하지 않고 현재 서버에서 데이터베이스를 제거하려면 sp_detach_db를 사용합니다.

경고

FILE_SNAPSHOT 백업과 연결된 데이터베이스 파일을 제거하는 것은 성공하지만 연결된 스냅샷이 있는 데이터베이스 파일은 해당 데이터베이스 파일을 참조하는 백업이 무효화되는 것을 방지하기 위해 삭제되지 않습니다. 파일은 잘라지지만 FILE_SNAPSHOT 백업을 그대로 유지하기 위해 물리적으로 삭제되지는 않습니다. 자세한 내용은 Microsoft Azure Blob Storage로 SQL Server 백업 및 복원을 참조하세요. 적용 대상: 현재 버전을 통한 SQL Server 2016(13.x)입니다.

SQL Server

데이터베이스 스냅샷을 삭제하면 SQL Server 인스턴스에서 데이터베이스 스냅샷이 삭제되고 스냅샷이 사용하는 물리적 NTFS 파일 시스템 스파스 파일도 삭제됩니다. 데이터베이스 스냅샷을 통한 스파스 파일 사용에 대한 자세한 내용은 데이터베이스 스냅샷을 참조하세요. 데이터베이스 스냅샷을 삭제하면 SQL Server의 인스턴스에 대한 계획 캐시가 삭제됩니다. 계획 캐시를 삭제하면 모든 후속 실행 계획이 다시 컴파일되며 일시적으로 갑자기 쿼리 성능이 저하될 수 있습니다. 계획 캐시의 삭제된 각 캐시스토어에 대해 SQL Server 오류 로그에 "데이터베이스 유지 관리 또는 재구성 작업으로 인해 '%s' 캐시스토어(계획 캐시의 일부)에 대한 캐시스토어 플러시가 SQL Server에서 %d번 발견되었습니다"라는 정보 메시지가 있습니다. 이 메시지는 캐시가 해당 시간 간격 내에 플러시되는 동안 5분마다 기록됩니다.

상호 운용성

SQL Server

트랜잭션 복제를 위해 게시된 데이터베이스 또는 병합 복제를 위해 게시 또는 구독된 데이터베이스를 삭제하려면 먼저 데이터베이스에서 복제를 제거해야 합니다. 데이터베이스가 손상되었거나 복제를 먼저 제거할 수 없거나 또는 두 가지 모두 해당되는 경우, 대부분 ALTER DATABASE를 사용해 데이터베이스를 오프라인으로 설정한 뒤 삭제하는 방식으로 데이터베이스를 삭제할 수 있습니다.

데이터베이스에서 로그 전달 작업을 수행하고 있는 경우 데이터베이스를 삭제하기 전에 로그 전달을 제거하세요. 자세한 내용은 로그 전달 정보를 참조하세요.

제한 사항

시스템 데이터베이스는 삭제할 수 없습니다.

DROP DATABASE 문은 자동 커밋 모드로 실행되어야 하며 명시적이거나 암시적인 트랜잭션에서는 허용되지 않습니다. 자동 커밋 모드는 기본 트랜잭션 관리 모드입니다.

경고

사용 중인 데이터베이스는 삭제할 수 없습니다. 즉, 모든 사용자의 읽기 또는 쓰기 잠금이 유지됩니다. 데이터베이스에서 사용자를 제거하는 한 방법은 ALTER DATABASE를 사용해 데이터베이스를 SINGLE_USER로 설정하는 것입니다. 이 전략에서는 다른 연결에서 단일 사용자 세션을 클레임할 수 없도록 ALTER DATABASE 및 DROP DATABASE를 동일한 일괄 처리로 실행해야 합니다. 아래의 예제 D를 참조하세요.

SQL Server

데이터베이스를 삭제하려면 먼저 데이터베이스의 모든 데이터베이스 스냅샷을 삭제해야 합니다.

Stretch Database에 대해 활성화된 데이터베이스를 삭제해도 원격 데이터가 제거되지는 않습니다. 원격 데이터를 삭제하려면 수동으로 제거해야 합니다.

Important

Stretch Database는 SQL Server 2022(16.x) 및 Azure SQL Database에서 더 이상 사용되지 않습니다. 이 기능은 이후 버전의 데이터베이스 엔진 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.

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. 여러 데이터베이스 삭제

적용 대상: SQL Server 2008(10.0.x) 이상

다음 예에서는 목록의 데이터베이스 각각을 제거합니다.

DROP DATABASE Sales, NewSales;

C. 데이터베이스 스냅샷 삭제

적용 대상: SQL Server 2008(10.0.x) 이상

다음 예에서는 원본 데이터베이스에 영향을 주지 않으면서 sales_snapshot0600이라는 이름의 데이터베이스 스냅샷을 삭제합니다.

DROP DATABASE sales_snapshot0600;

D. 데이터베이스가 있는지 확인한 후 데이터베이스 삭제

다음 예제에서는 먼저 Sales라는 데이터베이스가 있는지 확인합니다. 데이터베이스가 있으면 예제에서는 Sales라는 데이터베이스를 단일 사용자 모드로 변경하여 다른 모든 세션의 연결을 강제로 끊은 다음, 데이터베이스를 삭제합니다. SINGLE_USER에 대한 자세한 내용은 ALTER DATABASE SET 옵션을 참조하세요.

USE tempdb;
GO
DECLARE @SQL 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;';
    EXEC (@SQL);
END;

참고 항목