재해 복구 및 변경 불가능한 저장소를 위한 백업

백업은 조직이 중요한 데이터를 수정하거나 삭제하지 못하도록 보호하는 데 도움이 됩니다.

백업은 Snowflake 오브젝트의 개별 백업을 나타냅니다. 백업할 오브젝트, 백업 빈도, 백업 보존 기간, 오브젝트가 조기에 삭제되지 않도록 보존 잠금을 추가할지 여부를 선택합니다.

Snowflake 백업의 사용 사례

다음 사용 사례는 백업의 일반적인 애플리케이션입니다.

규정 준수:

보존 잠금이 설정된 백업은 조직, 금융 기관 및 관련 산업에서 레코드를 변경할 수 없는 형식으로 보존해야 하는 규정을 준수하는 데 도움이 됩니다.

참고

Snowflake는 Cohaset Associates와 협력하여 SEC 17a-4(f), SEC 18a-6(e), FINRA 규칙 4511(c) 및 CFTC 규칙 1.31(c)~(d)를 포함한 주요 규정 기록 보관 요구 사항을 준수하는지 여부를 확인하기 위해 백업 기능에 대한 독립적인 평가를 수행합니다. 이 Cohasset 평가는 Snowflake의 변경 불가능한 저장소 제어가 데이터의 생성, 보호 및 보존을 지원한다는 독립적인 서드 파티 검증을 제공하며, 고객은 Snowflake가 평가된 규정에 따라 규제 대상 데이터 보존에 대한 중요한 산업 표준을 충족한다는 확신을 고객에게 제공합니다.

보존 잠금이 설정된 Snowflake 백업에 적용되는 전체 규정 준수 보고서는 `Snowflake 규정 준수 센터<https://trust.snowflake.com/resources?s=jv88d2ujxzj9kcnz43w31&name=snowflake-cohasset-assessment>`_를 참조하세요.

복구:

백업은 조직에서 실수로 수정하거나 삭제하는 경우 비즈니스에 중요한 데이터를 보호하고 복구하기 위해 별도의 스냅샷을 생성하는 데 도움이 됩니다.

사이버 복원력:

보존 잠금이 설정된 백업은 전반적인 사이버 복원력 전략의 일부입니다. 이는 조직이 사이버 공격, 특히 랜섬웨어 공격 중에 비즈니스에 중요한 데이터를 보호하는 데 도움이 됩니다. 보존 잠금은 공격자가 ACCOUNTADMIN 또는 ORGADMIN 역할을 사용하여 계정에 대한 액세스 권한을 얻더라도 공격자가 이 데이터를 삭제할 수 없도록 합니다.

핵심 개념

이 섹션에서는 Snowflake 백업의 핵심 개념에 대한 개요를 제공합니다.

백업

*백업*은 오브젝트의 특정 시점 스냅샷을 나타냅니다.

  • 오브젝트는 단일 테이블, 스키마 또는 전체 데이터베이스일 수 있습니다.

  • 특정 백업은 Snowflake에 의해 생성된 고유한 ID로 식별할 수 있습니다.

  • 백업은 수정할 수 없습니다. 그러나 삭제할 수 있으며 백업 만료 기간을 수정할 수 있습니다(단, :ref:`보존 잠금<label-backups_concept_retention_lock>`이 적용됨).

일상적인 작업 중에는 개별 백업과 거의 상호 작용하지 않습니다. 대신, 이를 포함하는 *백업 세트*를 관리합니다. 예를 들어, SHOW BACKUPS IN BACKUP SET 명령을 실행하여 백업 목록을 가져옵니다. ALTER BACKUP SET 명령을 실행하여 새 백업을 만듭니다.

백업 세트

*백업 세트*는 특정 데이터베이스, 스키마 또는 테이블에 대한 백업 세트를 포함하는 스키마 수준 오브젝트입니다. Snowflake에는 CREATE, ALTER, DROP, SHOW 및 DESCRIBE 백업 세트에 대한 SQL 명령이 있습니다.

동일한 오브젝트에 대해 여러 백업 세트를 가질 수 있습니다.

세트 내 백업의 수명 주기는 백업 세트에 연결할 수 있는 선택적 백업 정책*에 의해 결정됩니다. 백업 세트에서 백업을 수동으로 추가하거나 삭제할 수도 있습니다. 백업 삭제 기능은 다른 요소, 특히 *보존 잠금*법적 보존*의 영향을 받습니다.

백업 정책

*백업 정책*은 백업 세트 내에서 백업의 수명 주기를 정의하는 설정을 포함하는 스키마 수준 오브젝트입니다. 이러한 설정에는 일정, 만료 및 보존 잠금이 포함됩니다.

  • *일정*은 백업이 생성되는 시점을 결정합니다. 일정은 분 단위의 간격 또는 cron 표현식으로 정의할 수 있습니다. 예를 들어, 일정이 1시간으로 설정된 경우 오브젝트의 백업은 60분마다 생성됩니다.

  • *만료 기간*은 백업이 유효한 기간입니다. 백업이 만료된 후 Snowflake는 해당 특정 백업에 법적 보존이 적용되지 않는 한 백업을 자동으로 삭제합니다.

    백업 세트에 보존 잠금이 적용되지 않고 특정 백업에 법적 보존이 적용되지 않은 경우 만료 기간이 끝나기 전에 백업을 수동으로 삭제할 수 있습니다. 항상 법적 보존이 적용되지 않은 가장 오래된 백업부터 시작하여 한 번에 하나씩 백업을 수동으로 삭제할 수 있습니다.

각 백업 정책에는 일정 및 만료 기간 속성 중 하나 또는 둘 다 있어야 합니다. 예를 들어, 일정과 만료 기간이 있는 정책을 만들고 Snowflake가 해당 정책이 적용되는 모든 백업 세트에서 백업의 모든 생성 및 제거를 처리하도록 할 수 있습니다. 또는 이전 백업 제거를 직접 관리하려는 경우 일정이 있고 만료 기간이 없는 정책을 생성할 수 있습니다. 또는 만료 기간이 있지만 일정이 없는 정책을 생성한 후 백업 생성을 직접 관리할 수 있습니다. 일정과 만료 기간이 없는 정책은 만들 수 없습니다.

백업 정책을 백업 세트와 연결하는 경우 백업 세트를 생성할 때 연결하거나 나중에 정책을 적용할 수 있습니다. 또는 연결된 백업 정책이 없는 백업 세트가 있을 수 있습니다. 이 경우 새 백업을 생성하고 이전 백업을 만료하는 시점을 수동으로 제어할 수 있습니다.

백업 정책은 여러 백업 세트에 적용할 수 있습니다. 백업 정책을 수정하면 Snowflake에서 정책이 연결된 모든 백업 세트에 변경 사항을 적용합니다.

보존 잠금

*보존 잠금*은 정의된 만료 기간 동안 백업이 삭제되지 않도록 보호합니다. 규정 준수 및 사이버 복원력을 위한 백업에 보존 잠금이 설정된 백업을 사용할 수 있습니다. 보존 잠금이 설정된 백업 세트에는 다음 제한 사항이 적용됩니다.

  • ACCOUNTADMIN 역할을 포함한 어떤 역할도 백업을 삭제할 수 없습니다.

  • 백업 만료 기간을 줄일 수는 없지만 만료 기간을 늘릴 수는 있습니다.

  • 세트에 만료되지 않은 백업이 있는 경우 백업 세트를 삭제할 수 없습니다.

  • 만료되지 않은 백업이 있는 백업 세트가 포함된 스키마는 삭제할 수 없습니다.

  • 만료되지 않은 백업이 있는 백업 세트가 포함된 데이터베이스는 삭제할 수 없습니다.

  • 만료되지 않은 백업이 있는 백업 세트가 있는 데이터베이스가 포함된 계정은 삭제할 수 없습니다.

중요

보존 잠금이 설정된 백업 정책을 백업 세트에 적용하면 되돌릴 수 없습니다. 규정 준수에 필요한 강력한 보장으로 인해 백업 세트에 보존 잠금을 설정한 후에는 잠금을 취소할 수 없습니다. Snowflake 지원도 이러한 보존 잠금을 취소할 수 없습니다. 만료 기간이 긴 백업 세트에 보존 잠금을 설정하기 전에 신중하게 계획하여 삭제할 수 없는 백업 세트 및 이를 포함하는 스키마와 데이터베이스에 예기치 않은 저장소 요금이 부과되지 않도록 하세요.

Snowflake 조직이 삭제되면 해당 조직은 더 이상 Snowflake 고객이 아닙니다. 이 경우 Snowflake는 보존 잠금이 설정된 스냅샷을 포함하여 모든 스냅샷을 삭제합니다. 이 경우 Snowflake는 보존 잠금이 설정된 백업을 포함하여 모든 백업을 삭제합니다. Snowflake 조직을 삭제하려면 Snowflake 지원의 참여가 필요합니다. 관리자가 실수로 삭제할 수 없습니다.

백업 수명 주기 개요

다음 다이어그램은 Snowflake 오브젝트, 백업, 백업 세트 및 백업 정책이 서로 어떻게 관련되는지 보여줍니다. 이 다이어그램에서는 가장 간단한 종류의 백업(단일 테이블에 대한 백업)을 보여줍니다. 각 백업 작업은 새 백업을 생성합니다. 해당 특정 오브젝트에 대한 모든 백업은 백업 세트에 함께 그룹화됩니다. 백업 세트에서 백업을 자동 추가 및 제거하는 작업에는 백업 정책이 적용됩니다. 백업에서 정보를 복구하려면 CREATE 명령을 사용하여 특정 백업에서 새 오브젝트를 생성합니다.

백업 주요 개념

백업 작동 방식

백업은 :doc:`복제본</user-guide/object-clone>`과 유사한 Snowflake 오브젝트의 제로 카피 복제입니다. 백업은 생성될 때 테이블 데이터의 복사본을 만들지 않습니다. 백업 메커니즘은 데이터 복사에 소요되는 추가 비용이나 시간을 발생시키지 않고 테이블 데이터를 백업합니다.

Snowflake는 변경할 수 없는 파일에 데이터를 저장하고 백업에서 테이블의 기초가 되는 데이터 파일에 대한 포인터를 유지 관리합니다. 테이블이 진화하고 수정됨에 따라 Snowflake는 해당 파일을 참조하는 만료되지 않은 백업이 있는 한, 각 데이터 파일이 삭제되지 않도록 보호합니다.

백업에 대한 제한 사항

Snowflake는 백업에 대해 다음과 같은 제한 사항을 적용합니다.

  • 백업 정책의 보존 잠금은 수정할 수 없습니다.

  • 정책에 보존 잠금이 있는 경우 만료 기간을 늘릴 수는 있지만 줄일 수는 없습니다.

  • 예약된 백업의 최소 예약 간격은 1시간(60분)입니다.

백업의 제한 사항

특정 데이터베이스에 대해 최대 2개의 데이터베이스 백업 세트를 생성할 수 있습니다. 마찬가지로, 특정 스키마에 대해 최대 2개의 스키마 백업 세트를 생성하고 특정 테이블에 대해 최대 2개의 테이블 백업 세트를 생성할 수 있습니다. 오브젝트는 여전히 3개 이상의 백업 세트에 나타날 수 있습니다. 예를 들어, 테이블에는 하나 또는 두 개의 연결된 테이블 백업 세트가 있을 수 있습니다. 동일한 테이블이 하나 또는 두 개의 스키마 백업 세트와 하나 또는 두 개의 데이터베이스 백업 세트에 포함될 수도 있습니다.

백업과 다른 재해 복구 및 비즈니스 연속성 기능 비교

백업은 복제, Time Travel과 같은 다른 Snowflake 비즈니스 연속성 및 재해 복구 기능과 다른 다음과 같은 이점을 제공합니다.

  • 백업에 대한 장기 보존을 활성화할 수 있습니다. 장기 보존은 랜섬웨어 또는 내부 공격과 같은 위협에 대한 복구, 규정 준수, 사이버 복원력에 도움이 됩니다.

  • 보존 잠금을 사용하면 계정 관리자를 포함한 어떤 사용자도 백업을 삭제할 수 없습니다.

  • 복제 새로 고침과 같은 다른 데이터 전송 작업에 사용하는 시간 프레임과 다른 시간 프레임에 백업을 예약할 수 있습니다.

  • 개별 테이블 오브젝트 또는 전체 스키마나 데이터베이스와 같은 컨테이너 오브젝트를 백업하고 복원할 수 있습니다.

  • 보존 잠금이 있는 백업 정책을 사용하여 백업이 수행된 후 백업 보존 시간이 단축되는 것을 방지할 수 있습니다. 이는 보존 간격을 0으로 줄일 수 있는 Time Travel 기능과 다릅니다.

  • Time Travel 및 Fail-safe와 달리, 백업은 테이블 및 테이블 데이터보다 더 많은 유형의 오브젝트에서 데이터를 보존합니다.

  • 백업을 수행하는 속도와 저장소 효율성은 복제에 사용되는 제로 카피 메커니즘과 유사합니다.

  • 동일한 오브젝트의 모든 백업이 백업 세트로 그룹화되는 방식을 사용하면 복제본을 사용하여 자체 백업 메커니즘을 구현하는 것보다 관리가 더 간단해집니다. 예를 들어, 많은 수의 오브젝트를 관리하거나, 복제된 오브젝트를 추적하는 명명 체계를 고안하거나, 오래된 복제본을 삭제하기 위한 예약 메커니즘을 구현할 필요가 없습니다. 또한, 복제된 오브젝트와 달리 백업을 생성한 후에는 수정할 수 없습니다.

  • 각 백업은 지정된 시점의 단일 테이블, 스키마 또는 데이터베이스를 나타냅니다. 백업에는 사용자 또는 역할과 같은 계정 수준 오브젝트가 포함되지 않습니다. 일부 종류의 테이블과 기타 데이터베이스 수준 오브젝트는 스키마 및 데이터베이스 백업에 포함되지 않습니다. 자세한 내용은 :ref:`백업 오브젝트<label-backup_objects>`를 참조하세요.

  • 백업 관련 오브젝트는 연결된 데이터베이스, 스키마 또는 테이블과 동일한 클라우드 서비스 공급자(CSP) 리전에 저장됩니다. 비즈니스 연속성 및 재해 복구 시나리오의 경우 일반적으로 백업을 Snowflake 계정 복제와 결합합니다. 이를 통해 모든 백업 세트와 백업 정책을 다른 리전이나 다른 CSP에 복제하고 원래 리전이나 CSP에 영향을 미치는 중단이 발생하더라도 복구할 수 있습니다.

  • 백업 세트 및 백업 정책은 복제할 수 없습니다. 이러한 오브젝트가 포함된 스키마 또는 데이터베이스를 복제하는 경우, 복제된 스키마 또는 데이터베이스에는 해당 오브젝트가 포함되지 않습니다.

백업 오브젝트

테이블, 스키마 및 데이터베이스에 대한 백업 세트를 생성할 수 있습니다.

테이블에서 다른 오브젝트로의 참조

뷰 또는 함수와 같은 오브젝트는 백업에서 스키마 또는 데이터베이스 외부의 오브젝트를 참조할 수 있습니다. 백업에서 복원한 후에도 이러한 참조가 계속 작동하도록 하려면 다음 전략 중 하나를 사용합니다.

  • 테이블 및 테이블이 참조하는 다른 오브젝트가 모두 동일한 스키마 또는 동일한 데이터베이스에 있는 경우 전체 스키마 또는 데이터베이스에 대한 백업 세트를 생성합니다. 이를 통해 백업에서 복원할 때 Snowflake가 상호 연결된 모든 오브젝트를 한 번에 복원합니다.

  • 백업 세트의 오브젝트가 백업 세트에 포함되지 않은 오브젝트를 참조하는 경우, 백업이 복원될 때 복원된 오브젝트의 참조가 다른 데이터베이스 또는 스키마의 원래 오브젝트를 가리킵니다. 백업을 만든 후 다른 오브젝트를 삭제했거나 해당 속성을 변경한 경우 복원된 오브젝트에 액세스할 때 오류가 발생할 수 있습니다.

  • 계정 수준 오브젝트의 경우 복원된 오브젝트의 모든 참조는 항상 원래 계정 수준 오브젝트를 가리킵니다. 이는 계정 수준 오브젝트가 백업의 일부가 아니기 때문입니다. 예를 들어, 스키마 백업에는 보안 통합을 참조하는 시크릿이 포함될 수 있습니다. 보안 통합은 계정 수준 오브젝트이며 어떤 백업에도 포함될 수 없습니다.

데이터베이스 및 스키마 백업의 오브젝트 유형

다음 테이블에는 데이터베이스 또는 스키마 백업에 포함된 오브젝트가 나열되어 있습니다.

오브젝트

백업에 포함됨

참고

영구 테이블

테이블에 대한 Time Travel 정보는 백업의 일부로 저장되지 않습니다.

일시적 테이블

이러한 테이블은 복원한 후에도 계속해서 일시적 테이블로 유지됩니다. 일시적 스키마와 일시적 데이터베이스는 복원 후에도 일시적 속성을 유지합니다.

임시 테이블

아니요

임시 테이블은 세션 범위이며 백업에 포함되지 않습니다.

동적 테이블

동적 테이블에는 백업을 위한 자체 데이터 정의 언어(DDL) 구문이 있습니다. CREATE BACKUP SET FOR DYNAMIC TABLE 및 CREATE DYNAMIC TABLE FROM BACKUP SET 명령을 실행할 수 있습니다. 백업에서 동적 테이블을 복원하면 테이블이 일시 중단된 상태로 복원됩니다. Snowflake는 첫 번째 새로 고침 중에 새 테이블을 :ref:`자동으로 초기화<label-dynamic_tables_initialization>`합니다.

외부 테이블

아니요

하이브리드 테이블

아니요

Apache Iceberg™ 테이블

아니요

테이블 제약 조건

이벤트 테이블

아니요

시퀀스

구체화된 뷰

아니요

보안 뷰

파일 형식

내부 스테이지

아니요

외부 스테이지

아니요

임시 스테이지

아니요

디렉터리 테이블

아니요

파이프

아니요

저장 프로시저

SQL, Javascript, Python, Java 및 Scala 프로시저가 모두 지원됩니다.

사용자 정의 함수(UDF)

SQL, Javascript, Python, Java, Scala 함수가 모두 지원됩니다. Scala UDFs 및 사용자 정의 테이블 함수(UDTFs) 모두 백업에 포함됩니다. 백업의 Java UDFs는 :ref:`label-limitations_on_cloning_java_udfs`와 요구 사항이 동일합니다.

스트림

아니요

작업

작업은 백업에 포함됩니다. 백업에서 복원된 작업은 일시 중단되며 다시 시작해야 합니다.

데이터 메트릭 함수(DMFs)

아니요

정책

스키마 또는 데이터베이스 백업에는 다음과 같은 종류의 정책이 포함됩니다.

  • 열 수준 보안(마스킹)

  • 행 액세스 정책

  • 태그 기반 마스킹 정책

백업에 포함된 테이블에 다른 종류의 정책(예: 집계 정책, 프로젝션 정책 또는 저장소 수명 주기 정책)이 적용된 경우 백업 생성이 실패합니다.

권한

역할을 삭제하면 관련 소유권 부여가 DROP ROLE 명령을 수행하는 역할로 이전됩니다. 이 경우 소유권 이외의 권한 부여는 삭제됩니다. 따라서 복원된 오브젝트에 대한 권한 부여는 백업이 생성될 때 존재했던 권한 부여와 다를 수 있습니다.

데이터베이스 역할

아니요

오브젝트 태그 지정

경고

네트워크 규칙

Github 리포지토리

아니요

모델

아니요

모델 모니터

아니요

데이터 세트

아니요

Notebooks

아니요

연락처

아니요

Cortex Search Services

아니요

Dbt 프로젝트

아니요

이미지 리포지토리

아니요

목록

아니요

조직 목록

아니요

파이프

아니요

정책(집계)

아니요

정책(인증)

아니요

정책(기능)

아니요

정책(조인)

아니요

정책(패키지)

아니요

정책(비밀번호)

아니요

정책(개인정보 보호)

아니요

정책(프로젝션)

아니요

정책(세션)

아니요

프로비저닝된 처리량

아니요

의미 체계 뷰

아니요

서비스

아니요

Streamlits

아니요

Snowflake가 오브젝트를 백업 세트와 연결하는 방법

데이터베이스, 스키마 또는 테이블에 대한 백업 세트를 생성하면 Snowflake는 백업 세트를 해당 데이터베이스, 스키마 또는 테이블의 내부 ID와 연결합니다. 원본 오브젝트를 삭제하면 해당 백업 세트에 더 이상 백업을 추가할 수 없습니다. 이 동작은 동일한 이름의 오브젝트를 다시 생성하거나 백업에서 복원된 오브젝트로 바꾸는 경우에도 적용됩니다.

대신 기존 오브젝트의 이름을 바꾸면 동일한 백업 세트에 더 많은 백업을 추가하여 더 많은 백업을 계속 생성할 수 있습니다. 이 경우 SHOW BACKUP SETS의 출력은 이름이 변경된 오브젝트의 OBJECT_NAME 값을 반영하도록 변경됩니다.

테이블을 백업하고 싶지만 CREATE OR REPLACE 문을 통해 해당 테이블을 자주 삭제하고 다시 만드는 경우 테이블이 포함된 스키마 또는 데이터베이스에 대한 백업 세트에 이를 포함합니다. 이를 통해 테이블의 변경 사항에 관계없이 동일한 백업 세트를 계속 사용할 수 있습니다.

백업에서 테이블을 복원할 때 복원된 테이블은 기존 이름과 다른 이름으로 시작합니다. 기존 테이블의 내용을 백업 데이터로 완전히 바꾸고 동일한 테이블의 더 많은 백업을 위해 동일한 백업 세트를 계속 사용한다고 가정해 보겠습니다. 이 경우 TRUNCATE 또는 DELETE 문을 사용하여 기존 테이블의 내용을 제거하고 INSERT … SELECT 문을 사용하여 복원된 테이블에서 데이터를 복사합니다. 기존 테이블을 삭제하고 복원된 테이블의 이름을 기존 테이블의 이름으로 바꾸지 마세요.

백업 및 암호화

백업 세트 내의 데이터는 다른 Snowflake 오브젝트 및 테이블 데이터와 동일한 엔드 투 엔드 암호화로 보호됩니다. Snowflake 암호화에 대한 자세한 내용은 Snowflake의 종단 간 암호화 이해하기 섹션을 참조하세요.

키 순환은 백업 내의 데이터에도 적용됩니다.

백업 및 데이터 계보

Snowflake는 데이터 계보 메타데이터를 데이터베이스, 스키마 및 테이블 백업과 함께 보존하지 않습니다. 백업에서 오브젝트를 복원한 후에는 Snowsight 를 사용하여 복원된 데이터에 대한 계보 정보를 볼 수 있습니다.

백업 비용

다음 테이블은 백업 요금을 설명합니다.

크레딧 사용량에 대한 자세한 내용은 `Snowflake Service Consumption Table<https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf>`_을 참조하세요.

비용 구성 요소

설명

요금이 청구됨

백업 컴퓨팅

Snowflake 관리 컴퓨팅 서비스는 예약된 백업 생성 및 만료를 생성합니다.

컴퓨팅 복원

Snowflake 관리 웨어하우스는 백업에서 오브젝트를 복원하는 데 사용됩니다.

백업 저장소

백업 데이터를 저장하기 위한 Snowflake 관리 클라우드 오브젝트 저장소입니다.

복제본에서 보존된 바이트와 유사하게, 백업에서 보존된 바이트에 대해 청구됩니다.

TABLE_STORAGE_METRICS 뷰에서 RETAINED_FOR_CLONE_BYTES 열을 사용하여 백업 저장소 비용을 모니터링할 수 있으며, BACKUP_STORAGE_USAGE 뷰에서도 모니터링할 수 있습니다.

액세스 제어 권한

다음 테이블에는 백업을 관리하고 사용하기 위해 권한이 부여된 오브젝트 유형과 권한이 나열되어 있습니다.

권한

오브젝트 타입

설명

CREATE BACKUP POLICY

스키마

스키마에서 백업 정책을 생성할 수 있는 권한을 부여합니다. 이 권한을 부여하는 역할에는 스키마에 대한 USAGE 권한도 있습니다.

CREATE BACKUP SET

스키마

스키마에서 백업 세트를 생성할 수 있는 권한을 부여합니다. 이 권한을 부여하는 역할에는 스키마에 대한 USAGE 권한도 있습니다. 백업 세트를 실제로 생성하려면 백업 세트의 대상이 되는 오브젝트에 대한 적절한 권한도 필요합니다. 테이블 백업의 경우 SELECT 권한, 스키마 백업 또는 데이터베이스 백업의 경우 USAGE 권한입니다.

APPLY

백업 정책

특정 백업 정책을 적용할 수 있는 권한을 부여합니다. ACCOUNTADMIN 역할의 사용자만 이 권한을 부여할 수 있습니다.

APPLY BACKUP RETENTION LOCK

계정

보존 잠금이 설정된 백업 정책을 만들고 적용할 수 있는 권한을 부여합니다. 이 권한은 ACCOUNTADMIN 역할에 부여되며, 위임할 수 있습니다.

이 권한은 다음을 수행할 수 있는 역할을 활성화하는 데 필요합니다.

  • 보존 잠금이 설정된 백업 정책을 만듭니다.

  • 백업 세트에 보존 잠금이 설정된 백업 정책을 적용합니다.

  • 보존 잠금이 설정된 정책으로 보호되는 백업 세트에서 사용자가 수동으로 또는 일정에 따라 자동으로 백업을 생성합니다.

APPLY LEGAL HOLD

계정

백업에서 법적 보존을 추가하거나 제거할 수 있는 권한을 부여합니다. 기본적으로 ACCOUNTADMIN 역할에는 이 권한이 있습니다.

Snowflake가 백그라운드에서 백업을 자동으로 생성하거나 만료할 때 다음 권한 요구 사항이 적용됩니다. 백업 세트의 소유자는 다음 권한이 있어야 합니다.

  • 백업 세트의 대상이 되는 오브젝트에 대한 적절한 권한도 필요합니다. 테이블 백업의 경우 SELECT 권한, 스키마 백업 또는 데이터베이스 백업의 경우 USAGE 권한.

  • 백업 세트의 대상이 되는 상위 스키마 또는 데이터베이스에 대한 모든 권한.

  • 백업 세트의 상위 스키마 및 데이터베이스에 대한 모든 권한.

이러한 권한 중 하나라도 누락되면 자동 백업 생성 또는 만료가 실패합니다. ACCOUNT_USAGE BACKUP_OPERATION_HISTORY 뷰를 사용하여 이러한 백그라운드 작업을 모니터링할 수 있습니다.

백업 정책 및 세트 생성에 필요한 권한 부여하기

참고

  • 이러한 권한을 부여하는 데 사용되는 역할에는 스키마에 대한 OWNERSHIP 권한이 있어야 하거나 CREATE BACKUP SET 또는 CREATE BACKUP POLICY 권한과 WITH GRANT OPTION이 있어야 합니다.

  • 사용자 지정 계정 역할 또는 데이터베이스 역할에 다음 권한을 부여할 수 있습니다.

myrole 역할을 활성화하려면 스키마 ``myschema``에서 백업 정책을 생성하기 위해 다음 문을 실행합니다.

GRANT CREATE BACKUP POLICY ON SCHEMA policy_schema TO ROLE myrole;
Copy

myrole 역할을 활성화하려면 스키마 ``myschema``에서 백업 세트를 생성하기 위해 다음 문을 실행합니다.

GRANT CREATE BACKUP SET ON SCHEMA policy_schema TO ROLE myrole;
Copy

역할에 백업 정책에 대한 APPLY 권한 부여하기

참고

  • ACCOUNTADMIN 역할의 사용자만 이 권한을 부여할 수 있습니다.

  • 이 권한은 사용자 지정 계정 역할 또는 데이터베이스 역할에 부여할 수 있습니다.

myrole 역할을 활성화하려면 백업 세트에 hourly_backup_policy 백업 정책을 적용하기 위해 다음 문을 실행합니다.

GRANT APPLY ON BACKUP POLICY hourly_backup_policy TO ROLE myrole;
Copy

역할에 APPLY BACKUP RETENTION LOCK 권한 부여하기

역할에 권한을 부여하여 백업 세트에 보존 잠금이 설정된 백업 정책을 적용할 수 있습니다.

ACCOUNTADMIN 역할의 사용자만 이 권한을 부여할 수 있습니다.

중요

보존 잠금이 설정된 백업 정책을 백업 세트에 적용하면 되돌릴 수 없습니다. 규정 준수에 필요한 강력한 보장으로 인해 백업 세트에 보존 잠금을 설정한 후에는 잠금을 취소할 수 없습니다. Snowflake 지원도 이러한 보존 잠금을 취소할 수 없습니다. 보존 잠금이 적용된 상태로 생성된 백업은 만료 기간이 끝날 때까지 삭제할 수 없습니다.

Snowflake 조직이 삭제되면 해당 조직은 더 이상 Snowflake 고객이 아닙니다. 이 경우 Snowflake는 보존 잠금이 설정된 스냅샷을 포함하여 모든 스냅샷을 삭제합니다. 이 경우 Snowflake는 보존 잠금이 설정된 백업을 포함하여 모든 백업을 삭제합니다.

retention_lock_admin_role 역할이 백업 세트에 보존 잠금이 있는 백업 정책을 적용할 수 있도록 하려면 다음 문을 실행합니다.

GRANT APPLY BACKUP RETENTION LOCK ON ACCOUNT TO ROLE retention_lock_admin_role;
Copy

백업 생성 및 구성하기

이 섹션에서는 백업을 만들고 복원하는 워크플로의 예제를 제공합니다.

  1. 이름이 ``hourly_backup_policy``인 백업 정책을 만듭니다. 이 정책으로 수행된 백업은 매시간 생성되며 각 백업은 90일 후에 만료됩니다.

    CREATE BACKUP POLICY hourly_backup_policy
      SCHEDULE = '60 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'Hourly backups expire after 90 days';
    
    Copy
  2. hourly_backup_policy 백업 정책이 적용된 테이블 ``t1``에 대한 백업 세트를 만듭니다.

    CREATE BACKUP SET t1_backups
      FOR TABLE t1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy
  3. hourly_backup_policy 백업 정책이 적용된 스키마 ``s1``에 대한 백업 세트를 만듭니다.

    CREATE BACKUP SET s1_backups
      FOR SCHEMA s1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy
  4. hourly_backup_policy 백업 정책이 적용된 데이터베이스 ``d1``에 대한 백업 세트를 만듭니다.

    CREATE BACKUP SET d1_backups
      FOR DATABASE d1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy

보존 잠금이 설정된 예약된 백업 만들기

일정에 따라 보존 잠금이 설정된 백업을 자동으로 생성하는 백업 세트를 만듭니다. 보존 잠금은 권한이 있는 사용자를 포함하여 누구나 정책이 연결된 백업 세트의 백업을 삭제하거나 수정하는 것을 방지합니다.

계정에 대한 APPLY BACKUP RETENTION LOCK 권한이 있는 역할만 보존 잠금이 설정된 백업 정책을 만들 수 있습니다.

중요

보존 잠금이 설정된 백업 정책을 백업 세트에 적용하면 되돌릴 수 없습니다. 규정 준수에 필요한 강력한 보장으로 인해 백업 세트에 보존 잠금을 설정한 후에는 잠금을 취소할 수 없습니다. Snowflake 지원도 이러한 보존 잠금을 취소할 수 없습니다. 보존 잠금이 적용된 상태로 생성된 백업은 만료 기간이 끝날 때까지 삭제할 수 없습니다.

Snowflake 조직이 삭제되면 해당 조직은 더 이상 Snowflake 고객이 아닙니다. 이 경우 Snowflake는 보존 잠금이 설정된 스냅샷을 포함하여 모든 스냅샷을 삭제합니다. 이 경우 Snowflake는 보존 잠금이 설정된 백업을 포함하여 모든 백업을 삭제합니다.

  1. 만료 기간이 90일인 일일 백업을 생성하는 보존 잠금이 설정된 정책을 만듭니다.

    CREATE BACKUP POLICY daily_backup_policy_with_lock
      WITH RETENTION LOCK
      SCHEDULE = '1440 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'regulatory backups: they have a retention lock and expire after 90 days';
    
    Copy
  2. daily_backup_policy_with_lock 백업 정책이 적용된 테이블 ``t2``에 대한 백업 세트를 만듭니다.

    CREATE BACKUP SET t2_backups
      FOR TABLE t2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy
  3. daily_backup_policy_with_lock 백업 정책이 적용된 스키마 ``s2``에 대한 백업 세트를 만듭니다.

    CREATE BACKUP SET s2_backups
      FOR SCHEMA s2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy
  4. daily_backup_policy_with_lock 백업 정책이 적용된 데이터베이스 ``d2``에 대한 백업 세트를 만듭니다.

    CREATE BACKUP SET d2_backups
      FOR DATABASE d2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy

수동으로 백업 만들기

백업은 백업 세트에 언제든지 수동으로 추가할 수 있습니다. 이를 수행하면 백업 세트와 연결된 데이터베이스, 스키마 또는 테이블이 백업됩니다. 백업 세트에 백업 정책에 따라 예약된 백업도 있는지 여부에 관계없이 백업을 수동으로 만들 수 있습니다. 백업 세트와 연결된 백업 정책이 있고 정책이 만료 기간을 정의하는 경우 해당 만료 기간은 수동 백업에도 적용됩니다.

다음 예제에서는 t1_backups 테이블 백업 세트를 만든 후 첫 번째 백업을 여기에 추가합니다.

CREATE BACKUP SET t1_backups FOR TABLE t1;
ALTER BACKUP SET t1_backups ADD BACKUP;
Copy

다음 예제에서는 매시간 백업을 포함하는 백업 정책, 해당 정책을 사용하는 t2_backups 테이블 백업 세트를 생성한 후 백업 세트에 수동 백업을 추가합니다.

CREATE BACKUP POLICY hourly_backup_policy
  SCHEDULE = '60 MINUTE'
  EXPIRE_AFTER_DAYS = 7;

CREATE BACKUP SET t2_backups FOR TABLE t2 WITH BACKUP POLICY hourly_backup_policy;
-- Wait several hours. Then the backup set already contains several scheduled backups.
-- You can manually add a backup at any time, in addition to the scheduled backups.
ALTER BACKUP SET t2_backups ADD BACKUP;
Copy

유사한 명령을 실행하여 스키마 또는 데이터베이스 백업 세트에 백업을 추가할 수 있습니다. ALTER BACKUP SET 명령에 설정된 스키마 또는 데이터베이스 백업의 이름을 바꿉니다.

백업 세트에 대한 백업 정책 일시 중단하기

백업 세트에 대한 백업 정책을 일시 중단하면 해당 백업 세트에서 새 예약된 백업을 생성하는 데 백업 정책이 사용되지 않습니다. 또한 백업 정책을 사용하는 해당 백업 세트에서 기존 백업의 만료를 일시 중단합니다. 동일한 정책을 사용하는 다른 백업 세트는 영향을 받지 않습니다.

다음 예제에서는 t2_backups 백업 세트에 대한 백업 정책을 일시 중단합니다.

ALTER BACKUP SET t2_backups SUSPEND BACKUP POLICY;
Copy

백업 세트의 생성 또는 만료 프로세스만 선택적으로 일시 중단할 수도 있습니다. 다음 예제에서는 t3_backups 백업 세트에서 새 백업 생성을 일시 중단하고 t4_backups 백업 세트에서 이전 백업의 만료를 일시 중단합니다.

ALTER BACKUP SET t3_backups SUSPEND BACKUP CREATION POLICY;
ALTER BACKUP SET t4_backups SUSPEND BACKUP EXPIRATION POLICY;
Copy

ALTER BACKUP SET 명령에 대한 자세한 내용은 ALTER BACKUP SET 섹션을 참조하십시오.

백업 세트에 대한 백업 정책 재개하기

일시 중단된 백업 정책을 재개할 수 있습니다. 그러면 백업 정책에 따라 백업 생성 및 만료가 재개됩니다. 정책이 일시 중단된 동안 백업이 만료 시간에 도달한 경우 Snowflake는 정책이 재개되는 즉시 해당 백업을 삭제합니다.

다음 예제에서는 t1_backup 백업 세트에 대한 백업 정책을 재개합니다.

ALTER BACKUP SET t1_backups
  RESUME BACKUP POLICY;
Copy

백업 세트의 생성 또는 만료 프로세스만 선택적으로 재개할 수도 있습니다. 다음 예제에서는 t3_backups 백업 세트에서 새 백업 생성을 재개하고 t4_backups 백업 세트에서 이전 백업의 만료를 재개합니다.

ALTER BACKUP SET t3_backups SUSPEND BACKUP CREATION POLICY;
ALTER BACKUP SET t4_backups SUSPEND BACKUP EXPIRATION POLICY;
Copy

ALTER BACKUP SET 명령에 대한 자세한 내용은 ALTER BACKUP SET 섹션을 참조하십시오.

백업 복원하기

특정 백업의 ID를 사용하여 백업 세트에서 오브젝트를 복원할 수 있습니다. 예를 들어, 현재 스키마의 백업 세트 t1_backups``에서 ``t1 테이블을 복원하려면 다음 문을 실행합니다.

  1. backup_id 열에서 복원할 테이블 백업의 ID를 찾습니다.

    SHOW BACKUPS IN BACKUP SET t1_backups ->> SELECT "created_on", "backup_id", "expire_on" FROM $1;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+------------------------------------------+---------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 983e0b66-91eb-41cb-8a0b-037abfec1914 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | b5624ef0-1f35-452f-b132-09d8f0592e52 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | eca1a94a-fd40-46db-a2bc-4afba6a38c0a | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | d38caf14-f8a5-4ba8-a248-8287e0cdcf40 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-----------+-------------------+
    
  2. backup_id 열에서 복원할 스키마 백업의 ID를 찾습니다.

    SHOW BACKUPS IN BACKUP SET s1_backups;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 0a0382e1-d265-46e9-b152-4c3b2b859e65 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 8dbcf919-3393-4590-928f-5481d7f2502f | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | bd729a79-01bc-444d-a550-adaaa31ab62f | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 9a8802c5-5fbd-4200-a09d-43e046103939 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  3. backup_id 열에서 복원할 데이터베이스 백업의 ID를 찾습니다.

    SHOW BACKUPS IN BACKUP SET d1_backups;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 42435925-4e77-4b01-ba89-8163ac03e12f | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 29c2c1b9-6599-4f0b-87b8-d43377fd7c77 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | a4283984-a063-4415-acc4-0e3c19259fad | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | ffe25397-64b9-4c5f-b061-23a1885dc2dc | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. 2024-08-19 18:12:33에 생성된 테이블 ``t1``의 백업을 복원합니다.

    CREATE TABLE restored_t1 FROM BACKUP SET t1_backups IDENTIFIER 'b5624ef0-1f35-452f-b132-09d8f0592e52';
    
    Copy
  5. 2024-08-19 18:12:33에 생성된 스키마 ``s1``의 백업을 복원합니다.

    CREATE SCHEMA restored_s1 FROM BACKUP SET s1_backups IDENTIFIER '8dbcf919-3393-4590-928f-5481d7f2502f';
    
    Copy
  6. 2024-08-19 18:12:33에 생성된 데이터베이스 ``d1``의 백업을 복원합니다.

    CREATE DATABASE restored_d1 FROM BACKUP SET d1_backups IDENTIFIER '29c2c1b9-6599-4f0b-87b8-d43377fd7c77';
    
    Copy

백업 세트에서 백업 삭제하기

모든 백업 세트의 경우 법적 보존 조치가 설정되지 않은 가장 오래된 백업만 삭제할 수 있습니다. 백업 ID를 지정하여 삭제합니다. is_under_legal_hold 속성을 검사하여 법적 보존이 설정되지 않은 백업을 찾을 수 있습니다. created_on 속성을 검사하여 가장 오래된 백업을 찾을 수 있습니다.

참고

보존 잠금이 있는 백업 정책이 해당 백업 세트에 연결되어 있거나 특정 백업에 법적 보존이 설정된 경우 백업 세트에서 백업을 삭제할 수 없습니다.

백업 세트에서 삭제하는 백업은 세트에서 가장 오래된 백업이어야 합니다.

  1. 다음 출력의 backup_id 열에서 삭제할 테이블 백업의 ID를 찾습니다. created_on 열을 기준으로 오름차순으로 정렬하면 가장 오래된 백업이 먼저 표시됩니다. SELECT 명령에 ``LIMIT 1``을 추가하여 가장 오래된 백업의 세부 정보가 있는 행만 반환할 수 있습니다.

    SHOW BACKUPS IN BACKUP SET t1_backups ->>
      SELECT "created_on", "backup_id", "expire_on" FROM $1
        WHERE "is_under_legal_hold" = 'N'
        ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 983e0b66-91eb-41cb-8a0b-037abfec1914 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | b5624ef0-1f35-452f-b132-09d8f0592e52 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | eca1a94a-fd40-46db-a2bc-4afba6a38c0a | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | d38caf14-f8a5-4ba8-a248-8287e0cdcf40 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  2. backup_id``를 사용하여 2024-08-19 17:12:28에 생성된 ``t1_backups 백업을 삭제합니다.

    ALTER BACKUP SET t1_backups DELETE BACKUP IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
    
    Copy
  3. 다음 출력의 backup_id 열에서 삭제할 스키마 백업의 ID를 찾습니다.

    SHOW BACKUPS IN BACKUP SET s1_backups ->>
      SELECT "created_on", "backup_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 46a1e22a-8557-432f-a14c-1261a4ca2b34 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 3e42fef6-b895-4055-a59f-179744d015d3 | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 7807d24e-285e-4741-b332-87c32bad5cb6 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | e022e619-ee83-45a0-b2b7-9007e284bdb3 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. backup_id``를 사용하여 2024-08-19 17:12:28에 생성된 ``s1_backups 백업을 삭제합니다.

    ALTER BACKUP SET s1_backups DELETE BACKUP IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
    
    Copy
  5. 다음 출력의 backup_id 열에서 삭제할 데이터베이스 백업의 ID를 찾습니다.

    SHOW BACKUPS IN BACKUP SET d1_backups ->>
      SELECT "created_on", "backup_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | d3a77432-c98d-4969-91a9-fffae5dd655c | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 0a0382e1-d265-46e9-b152-4c3b2b859e65 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 25e01ee0-ea9d-4bb7-af7f-f3fe87f9409e | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | a12294f5-fc63-49cf-84f1-c7b72f7664af | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  6. backup_id``를 사용하여 2024-08-19 17:12:28에 생성된 ``d1_backups 백업을 삭제합니다.

    ALTER BACKUP SET d1_backups DELETE BACKUP IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
    
    Copy
  7. 2024-08-19 21:12:55에 생성된 최신 d1_backups 백업을 삭제하려고 시도합니다. Snowflake는 백업 세트에서 가장 오래된 백업을 제외한 다른 백업의 삭제를 차단합니다.

    ALTER BACKUP SET d1_backups DELETE BACKUP IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
    
    Copy
    Backup '28e12b8a-aab8-40a8-ae39-9a5a5f654d66' cannot be deleted as it is not the oldest active backup in the backup set D1_BACKUPS.
    

백업 세트 삭제하기

DROP BACKUP SET 명령을 사용하여 백업 세트를 삭제할 수 있습니다.

참고

보존 잠금이 설정되어 있고 만료되지 않은 백업이 포함된 백업 세트는 삭제할 수 없습니다. 또한 백업에 법적 보존 조치가 적용된 백업 세트도 삭제할 수 없습니다.

t1_backups 백업 세트를 삭제합니다.

DROP BACKUP SET t1_backups;
Copy

s1_backups 백업 세트를 삭제합니다.

DROP BACKUP SET s1_backups;
Copy

d1_backups 백업 세트를 삭제합니다.

DROP BACKUP SET d1_backups;
Copy

특정 테이블의 백업이 포함된 모든 백업 세트 찾기

다음 예제에서는 특정 스키마와 데이터베이스 내부에 특정 테이블이 포함된 모든 백업 세트를 찾는 방법을 보여줍니다. SHOW TABLES 명령은 파이프 연산자를 사용하여 데이터베이스, 스키마, 테이블의 이름을 검색하고 변수에 저장합니다. SHOW BACKUP SETS 출력은 테이블이 포함된 데이터베이스나 테이블이 포함된 스키마를 백업하는 백업 세트 또는 해당 단일 테이블을 포함하는 백업 세트를 표시하도록 필터링됩니다.

SHOW BACKUP SETS에서 필터링된 출력은 데이터베이스 ``my_big_important_database``에 대한 두 개의 데이터베이스 백업 세트, 스키마 ``my_big_important_database.public``에 대한 하나의 스키마 백업 세트, 테이블 ``my_big_important_database.public.my_small_secondary_table``에 대한 하나의 테이블 백업 세트가 있음을 보여줍니다.

SHOW TABLES IN SCHEMA public ->>
  SET (dname, sname, tname) =
    (SELECT "database_name", "schema_name", "name" FROM $1
      WHERE "name" = 'MY_SMALL_SECONDARY_TABLE' AND "kind" = 'TABLE');

SHOW BACKUP SETS ->> SELECT "object_kind", "name", "database_name", "schema_name", "object_name" FROM $1
  WHERE ("object_kind" = 'TABLE' AND "database_name" = $dname AND "schema_name" = $sname AND "object_name" = $tname)
    OR ("object_kind" = 'SCHEMA' AND "database_name" = $dname AND "object_name" = $sname)
    OR ("object_kind" = 'DATABASE' AND "object_name" = $dname);
Copy
+-------------+------------------+---------------------------+-------------+---------------------------+
| object_kind | name             | database_name             | schema_name | object_name               |
|-------------+------------------+---------------------------+-------------+---------------------------|
| DATABASE    | DATABASE_BACKUP  | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | MY_BIG_IMPORTANT_DATABASE |
| DATABASE    | DATABASE_BACKUP2 | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | MY_BIG_IMPORTANT_DATABASE |
| SCHEMA      | SCHEMA_BACKUP3   | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | PUBLIC                    |
| TABLE       | TABLE_BACKUP2    | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | MY_SMALL_SECONDARY_TABLE  |
+-------------+------------------+---------------------------+-------------+---------------------------+

종속성이 있는 테이블의 백업 만들기

다음 예제에서는 다른 스키마의 시퀀스와 외래 키를 참조하는 테이블에 대한 테이블 백업을 만드는 방법을 보여줍니다. 준비하기 위해 시퀀스와 테이블을 포함하는 스키마 other_schema``를 만듭니다. 그런 다음 시퀀스 다른 테이블을 참조하여 ``public 스키마에 기본 테이블을 만듭니다.

USE DATABASE my_big_important_database;

CREATE SCHEMA other_schema;
USE SCHEMA other_schema;

CREATE SEQUENCE my_sequence;
CREATE TABLE my_dimension_table (id INT AUTOINCREMENT PRIMARY KEY);

USE SCHEMA public;
CREATE TABLE dependent_table
(
   id INT DEFAULT my_big_important_database.other_schema.my_sequence.NEXTVAL PRIMARY KEY,
   foreign_id INT,
   FOREIGN KEY (foreign_id) REFERENCES my_big_important_database.other_schema.my_dimension_table(id)
 );

SELECT GET_DDL('TABLE','dependent_table');
Copy

GET_DDL() 출력은 다른 스키마를 가리키는 참조를 보여줍니다.

+-------------------------------------------+
| GET_DDL('TABLE','DEPENDENT_TABLE')        |
|-------------------------------------------|
| create or replace TABLE DEPENDENT_TABLE ( |
|     ID NUMBER(38,0) NOT NULL DEFAULT MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.MY_SEQUENCE.NEXTVAL,
|     FOREIGN_ID NUMBER(38,0),                |
|     primary key (ID),                       |
|     foreign key (FOREIGN_ID) references MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.MY_DIMENSION_TABLE(ID)
| );                                        |
+-------------------------------------------+

다음으로, 테이블에 대한 백업 세트를 생성하고 백업을 추가합니다.

CREATE BACKUP SET dependency_experiments FOR TABLE dependent_table;
ALTER BACKUP SET dependency_experiments ADD BACKUP;
SHOW BACKUPS IN BACKUP SET dependency_experiments;
Copy

SHOW BACKUPS 출력에는 복원 작업에 사용할 backup_id 값이 포함되어 있습니다.

+-------------------------------+--------------------------------------+------------------------+---------------------------+--------------+-----------+
| created_on                    | backup_id                            | backup_set_name        | database_name             | schema_name  | expire_on |
|-------------------------------+--------------------------------------+------------------------+---------------------------+--------------+-----------|
| 2025-07-01 11:53:27.860 -0700 | 0fd44138-b571-449b-be0a-72779501f80e | DEPENDENCY_EXPERIMENTS | MY_BIG_IMPORTANT_DATABASE | OTHER_SCHEMA | NULL      |
+-------------------------------+--------------------------------------+------------------------+---------------------------+--------------+-----------+

해당 테이블을 새 이름으로 복원하고, 복원된 테이블이 다른 스키마의 오브젝트를 참조하는지 확인합니다.

CREATE TABLE restored_dependent_table FROM BACKUP SET dependency_experiments
  IDENTIFIER '0fd44138-b571-449b-be0a-72779501f80e';

SELECT GET_DDL('TABLE','restored_dependent_table');
Copy
+----------------------------------------------------+
| GET_DDL('TABLE','RESTORED_DEPENDENT_TABLE')        |
|----------------------------------------------------|
| create or replace TABLE RESTORED_DEPENDENT_TABLE ( |
|     ID NUMBER(38,0) NOT NULL DEFAULT MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.MY_SEQUENCE.NEXTVAL,
|     FOREIGN_ID NUMBER(38,0),                         |
|     foreign key (FOREIGN_ID) references MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.MY_DIMENSION_TABLE(ID),
|     primary key (ID)                                 |
| );                                                 |
+----------------------------------------------------+

참조된 오브젝트가 더 이상 존재하지 않으면 어떻게 되는지 설명하기 위해 시퀀스를 삭제한 후 동일한 백업에서 테이블을 다시 복원합니다.

DROP SEQUENCE my_big_important_database.other_schema.my_sequence;
CREATE TABLE OR REPLACE restored_dependent_table FROM BACKUP SET dependency_experiments
  IDENTIFIER '0fd44138-b571-449b-be0a-72779501f80e';

SELECT * FROM restored_dependent_table;
Copy

테이블 쿼리는 여전히 작동합니다.

+----+------------+
| ID | FOREIGN_ID |
|----+------------|
+----+------------+
0 Row(s) produced. Time Elapsed: 0.129s

그러나 GET_DDL(), DESCRIBE 및 INSERT와 같은 작업은 더 이상 존재하지 않는 시퀀스에 의존하기 때문에 모두 실패합니다.

SELECT GET_DDL('TABLE','restored_dependent_table');
Copy
002073 (02000): SQL compilation error:
Sequence used as a default value in table 'MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.RESTORED_DEPENDENT_TABLE'
  column 'ID' was not found or could not be accessed.
DESC TABLE restored_dependent_table;
Copy
+------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------+
| name       | type         | kind   | null? | default                                | primary key | unique key | check | expression | comment | policy name | privacy domain |
|------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------|
| ID         | NUMBER(38,0) | COLUMN | N     | [sequence cannot be found or accessed] | Y           | N          | NULL  | NULL       | NULL    | NULL        | NULL           |
| FOREIGN_ID | NUMBER(38,0) | COLUMN | Y     | NULL                                   | N           | N          | NULL  | NULL       | NULL    | NULL        | NULL           |
+------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------+
INSERT INTO restored_dependent_table (foreign_id) VALUES (2);
Copy
002073 (02000): SQL compilation error:
Sequence used as a default value in table 'MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.RESTORED_DEPENDENT_TABLE'
  column 'ID' was not found or could not be accessed.

동적 테이블에 대한 백업 만들기

동적 테이블에는 항상 다른 테이블에 대한 참조가 포함됩니다. 이러한 이유로 기존 테이블과 동적 테이블을 동일한 백업에 포함할 수 있도록 동적 테이블에 대해 스키마 백업 또는 데이터베이스 백업을 사용하는 것을 선호할 수 있습니다.

동적 테이블에 대한 테이블 백업을 만드는 경우 CREATE BACKUP SET 명령에 DYNAMIC 명령을 포함하고 백업에서 복원할 때 CREATE TABLE 명령을 포함합니다. 다음 예제에서는 동적 테이블, 해당 테이블에 대해 설정된 테이블 백업을 설정하고 첫 번째 백업을 만듭니다.

CREATE DYNAMIC TABLE my_dynamic_table
  TARGET_LAG = '1 minute'
  WAREHOUSE = my_wh
  AS SELECT * FROM my_base_table WHERE col1 IS NOT NULL;

CREATE BACKUP SET dynamic_table_backups
  FOR DYNAMIC TABLE my_dynamic_table;

ALTER BACKUP SET dynamic_table_backups ADD BACKUP;
Copy

다음 예제에서는 다양한 시간에 생성된 백업에 대한 백업 IDs를 확인하는 방법을 보여줍니다. 이 경우 최신 백업이 결과 세트의 첫 번째 행입니다. 그런 다음 CREATE DYNAMIC TABLE 명령에서 백업의 ID를 사용합니다.

SHOW BACKUPS IN BACKUP SET dynamic_table_backups
  ->> SELECT "created_on", "backup_id" FROM $1
        ORDER BY "created_on" DESC;

CREATE DYNAMIC TABLE restored_dynamic_table
  FROM BACKUP SET dynamic_table_backups
    IDENTIFIER '<backup_id_from_SHOW_BACKUPS_output>';
Copy

백업에서 동적 테이블을 복원하면 Snowflake는 첫 번째 새로 고침 중에 새 테이블을 :ref:`자동으로 초기화<label-dynamic_tables_initialization>`합니다.

백업 및 백업 작업 모니터링하기

다음 뷰를 쿼리하여 존재하는 백업 관련 오브젝트, 해당 속성, 사용하는 저장소의 양을 확인할 수 있습니다.

Information Schema:

Account Usage:

Organization usage:

SQL 참조 항목

백업 정책

백업 세트

백업

실제 CREATE BACKUP 명령을 실행하지 않습니다. 새 백업을 생성하려면 ALTER BACKUP SET … ADD BACKUP을 실행합니다. 또는 백업 세트를 일정이 있는 백업 정책과 연결하면 Snowflake는 지정된 일정에 따라 백업 세트에 백업을 자동으로 생성합니다. 이전 백업을 삭제하려면 ALTER BACKUP SET … DELETE BACKUP을 실행합니다. 이러한 작업을 수행하려면 특정 백업의 식별자를 지정해야 합니다. 다음 명령을 사용하여 각 백업이 생성된 시점과 같은 기타 정보와 함께 백업 식별자를 찾을 수 있습니다.

백업에서 오브젝트 복원하기

CREATE object_kind FROM BACKUP SET 구문을 사용하여 적절한 종류의 백업 세트에서 각 종류의 오브젝트를 복원합니다.

백업 세트의 추가 백업에서는 복원된 오브젝트가 아닌 원래 오브젝트를 사용합니다. 복원된 오브젝트의 이름을 기존 오브젝트와 동일한 이름으로 바꾸더라도 마찬가지입니다. 복원을 수행한 후 동일한 백업 세트를 계속 사용하려면 오브젝트를 새 이름으로 복원한 후 데이터를 기존 오브젝트로 다시 전송합니다.

다음 시스템 뷰에는 백업, 백업 세트 및 백업 정책과 관련된 메타데이터가 포함되어 있습니다.

Information Schema 뷰

INFORMATION_SCHEMA 스키마의 해당 뷰에는 현재 존재하는 백업 관련 오브젝트에 대한 정보가 포함되어 있습니다.

Account Usage 뷰:

ACCOUNT_USAGE 스키마의 해당 뷰에는 존재하거나 삭제된 백업 관련 오브젝트, 백업에서 수행된 작업, 백업이 사용하는 저장소에 대한 계정 수준 정보가 포함되어 있습니다.

Organization Usage 뷰

ORGANIZATION_USAGE 스키마의 해당 뷰에는 존재하거나 삭제된 백업 관련 오브젝트, 백업에서 수행된 작업, 백업이 사용하는 저장소에 대한 조직 수준 정보가 포함되어 있습니다.

용어 변경

이 기능은 이제 스냅샷 대신 **백업**이라고 합니다. 다음의 모든 SQL 명령, 뷰 및 권한은 **BACKUP**이라는 용어를 사용합니다.

  • CREATE BACKUP POLICY, CREATE BACKUP SET

  • ALTER BACKUP POLICY, ALTER BACKUP SET

  • DROP BACKUP POLICY, DROP BACKUP SET

  • SHOW BACKUP POLICIES, SHOW BACKUP SETS, SHOW BACKUPS IN BACKUP SET

  • Account Usage, Organization Usage 및 Information Schema의 BACKUPS, BACKUP_POLICIES, BACKUP_SETS 뷰

  • APPLY BACKUP POLICY, APPLY BACKUP RETENTION LOCK 권한

이전의 SNAPSHOT/SNAPSHOTS 이름은 여전히 존재하지만 BACKUP/BACKUPS와의 동등성을 위해 사용 중단됩니다. 예:

  • CREATE SNAPSHOT POLICY는 사용 중단되며, 대신 CREATE BACKUP POLICY를 사용합니다.

  • SNAPSHOTS 뷰는 사용 중단되며, 대신 BACKUPS 뷰를 사용합니다.

  • APPLY SNAPSHOT POLICY 권한은 사용 중단되며, 대신 APPLY BACKUP POLICY 권한을 사용합니다.

더 이상 사용되지 않는 명령, 뷰 및 권한은 계속 작동하지만, Snowflake는 향후 릴리스에서 이러한 기능을 제거할 예정입니다.