DROP DATABASE

DROP DATABASE

시스템에서 데이터베이스(Database)를 제거하는 명령어입니다.

출처: 문서

본문

DROP DATABASE는 시스템에서 데이터베이스를 제거합니다. 관련 명령어로 CREATE DATABASE, ALTER DATABASE, DESCRIBE DATABASE, SHOW DATABASES, UNDROP DATABASE가 있어요.

구문 (Syntax)

DROP DATABASE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]

파라미터 (Parameters)

  • name — 삭제할 데이터베이스의 식별자를 지정합니다. 식별자에 공백, 특수 문자 또는 대소문자 혼합 문자가 포함된 경우 전체 문자열을 큰따옴표로 감싸야 합니다. 큰따옴표로 감싼 식별자는 대소문자를 구분해요.
  • CASCADE | RESTRICT — 데이터베이스 안의 테이블을 참조하는 외래 키가 존재할 때 데이터베이스를 삭제할 수 있는지 여부를 지정합니다.
    • CASCADE는 데이터베이스와 데이터베이스 안의 모든 객체를 삭제하며, 다른 테이블의 외래 키가 참조하는 기본/고유 키가 있는 테이블도 포함합니다.
    • RESTRICT는 기존 외래 키 참조에 대한 경고를 반환하고 데이터베이스를 삭제하지 않습니다.
    • 기본값: CASCADE

사용 참고 사항 (Usage notes)

  • 데이터베이스를 삭제해도 시스템에서 영구적으로 제거되지는 않습니다. 삭제된 데이터베이스의 버전은 데이터베이스의 DATA_RETENTION_TIME_IN_DAYS 파라미터로 지정된 일수 동안 Time Travel에 보존됩니다.
    • Time Travel 보존 기간 안에는 UNDROP DATABASE 명령어로 삭제된 데이터베이스를 복원할 수 있습니다.
    • Time Travel 보존 기간이 끝나면 삭제된 데이터베이스의 다음 상태는 영구(permanent)인지 임시(transient)인지에 따라 달라집니다. 영구 데이터베이스는 Fail-safe로 이동합니다. Fail-safe(7일)에서는 삭제된 데이터베이스를 Snowflake가 복구할 수 있지만 사용자는 할 수 없습니다. 데이터베이스가 Fail-safe를 벗어나면 삭제됩니다. 임시 데이터베이스는 Fail-safe가 없으므로 Time Travel을 벗어나면 삭제됩니다.
  • 삭제된 데이터베이스가 완전히 삭제되면 복구할 수 없으며 다시 생성해야 합니다.
  • 현재 데이터베이스가 삭제될 때, 하위 스키마나 테이블의 데이터 보존 기간이 데이터베이스의 보존 기간과 다르게 명시적으로 설정되어 있더라도 그 값이 존중되지 않습니다. 하위 스키마나 테이블은 데이터베이스와 동일한 기간 동안 보존됩니다. 이 하위 객체(스키마나 테이블)의 데이터 보존 기간을 존중하려면 데이터베이스나 스키마를 삭제하기 전에 명시적으로 삭제하세요.
  • 데이터베이스를 삭제한 후 같은 이름으로 데이터베이스를 생성하면 새 버전의 데이터베이스가 만들어집니다. 이전 데이터베이스의 삭제된 버전은 다음 방법으로 복원할 수 있습니다: ① 현재 버전의 데이터베이스 이름을 다른 이름으로 변경, ② UNDROP DATABASE 명령어로 이전 버전 복원.
  • 테이블이나 뷰 컬럼에 정책이나 태그가 연결되어 있으면, 데이터베이스를 삭제하려면 그 정책이나 태그가 데이터베이스와 스키마 안에 자체적으로 포함되어 있어야 합니다. 예를 들어 database_1이 policy_1을 포함하고 policy_1이 database_1에서만 사용되는 경우입니다. 그렇지 않으면 매달린 참조(dangling reference)가 발생합니다.
  • 사용자 또는 계정에 세션 정책이나 비밀번호 정책이 설정되어 있으면 DROP 작업은 실패합니다.
  • IF EXISTS 절을 지정하고 대상 객체가 존재하지 않으면, 명령어는 오류를 반환하지 않고 성공적으로 완료됩니다.
  • 중요: 데이터베이스에 보존 잠금(retention lock)이 있는 스냅샷 정책과 연결된 스냅샷 세트가 있고, 그 스냅샷 세트에 만료되지 않은 스냅샷이 있다면, 스냅샷 세트를 포함한 데이터베이스를 삭제할 수 없습니다. 이 경우 세트의 모든 스냅샷이 만료될 때까지 기다려야 합니다. 이 제한은 ACCOUNTADMIN과 같은 특권 역할과 Snowflake 지원팀에도 적용됩니다. 따라서 스냅샷 정책에 보존 잠금과 긴 만료 기간을 지정할 때는 주의하세요.

데이터베이스 복제 사용 참고 사항 (Database replication usage notes)

  • 보조 데이터베이스는 언제든지 삭제할 수 있습니다. 데이터베이스 소유자(즉, 데이터베이스에 OWNERSHIP 권한이 있는 역할)만 데이터베이스를 삭제할 수 있습니다.
  • 기본(primary) 데이터베이스의 복제본(보조 데이터베이스)이 하나 이상 존재하면 기본 데이터베이스를 삭제할 수 없습니다. 기본 데이터베이스를 삭제하려면 먼저 보조 데이터베이스를 기본 데이터베이스로 승격한 다음 이전 기본 데이터베이스를 삭제하세요. 또는 기본 데이터베이스의 모든 보조 데이터베이스를 삭제한 다음 기본 데이터베이스를 삭제하세요.
  • 데이터베이스 소유자만 데이터베이스를 삭제할 수 있습니다.

예제 (Examples)

DROP DATABASE mytestdb2;
+---------------------------------+
| status                          |
|---------------------------------|
| MYTESTDB2 successfully dropped. |
+---------------------------------+

SHOW DATABASES LIKE 'mytestdb2';

+------------+------+------------+------------+--------+-------+---------+---------+----------------+
| created_on | name | is_default | is_current | origin | owner | comment | options | retention_time |
|------------+------+------------+------------+--------+-------+---------+---------+----------------|
+------------+------+------------+------------+--------+-------+---------+---------+----------------+

SHOW DATABASES HISTORY LIKE 'mytestdb2';

+---------------------------------+-----------+------------+------------+--------+--------+---------+---------+----------------+---------------------------------+
| created_on                      | name      | is_default | is_current | origin | owner  | comment | options | retention_time | dropped_on                      |
|---------------------------------+-----------+------------+------------+--------+--------+---------+---------+----------------+---------------------------------|
| Wed, 25 Feb 2015 16:16:54 -0800 | MYTESTDB2 | N          | N          |        | PUBLIC |         |         |              1 | Fri, 13 May 2016 17:35:09 -0700 |
+---------------------------------+-----------+------------+------------+--------+--------+---------+---------+----------------+---------------------------------+

더 알아보기 (Learn more)