백업 및 변경 불가능한 저장소에 대한 스냅샷¶
스냅샷은 조직이 중요한 데이터를 수정하거나 삭제하지 못하도록 보호하는 데 도움이 됩니다.
스냅샷은 Snowflake 오브젝트의 개별 백업을 나타냅니다. 백업할 오브젝트, 백업 빈도, 백업 보존 기간, 오브젝트가 조기에 삭제되지 않도록 보존 잠금을 추가할지 여부를 선택합니다.
스냅샷 사용 사례¶
다음 사용 사례는 스냅샷의 일반적인 애플리케이션입니다.
- 규정 준수:
보존 잠금이 설정된 스냅샷은 조직, 금융 기관 및 관련 산업에서 레코드를 변경할 수 없는 형식으로 보존해야 하는 규정을 준수하는 데 도움이 됩니다.
중요
공개 미리 보기 기능은 특정 규정에 대해 인증되지 않았습니다. Snowflake는 이 기능이 일반 공급되는 시점에 규정 준수 인증을 획득할 계획입니다.
- 복구:
스냅샷은 조직에서 실수로 수정하거나 삭제하는 경우 비즈니스에 중요한 데이터를 보호하고 복구하기 위해 별도의 백업을 생성하는 데 도움이 됩니다.
- 사이버 복원력:
보존 잠금이 설정된 스냅샷은 전반적인 사이버 복원력 전략의 일부입니다. 이는 조직이 사이버 공격, 특히 랜섬웨어 공격 중에 비즈니스에 중요한 데이터를 보호하는 데 도움이 됩니다. 보존 잠금은 공격자가 ACCOUNTADMIN 또는 ORGADMIN 역할을 사용하여 계정에 대한 액세스 권한을 얻더라도 공격자가 이 데이터를 삭제할 수 없도록 합니다.
핵심 개념¶
이 섹션에서는 Snowflake 스냅샷의 핵심 개념에 대한 개요를 제공합니다.
스냅샷¶
*스냅샷*은 오브젝트의 특정 시점 백업을 나타냅니다.
오브젝트는 단일 테이블, 스키마 또는 전체 데이터베이스일 수 있습니다.
특정 스냅샷은 Snowflake에 의해 생성된 고유한 ID로 식별할 수 있습니다.
스냅샷은 수정할 수 없습니다. 그러나 삭제할 수 있으며 스냅샷 만료 기간을 수정할 수 있습니다(단, :ref:`보존 잠금<label-snapshots_concept_retention_lock>`이 적용됨).
일상적인 작업 중에는 개별 스냅샷과 거의 상호 작용하지 않습니다. 대신, 이를 포함하는 *스냅샷 세트*를 관리합니다. 예를 들어, SHOW SNAPSHOTS IN SNAPSHOT SET 명령을 실행하여 스냅샷 목록을 가져옵니다. ALTER SNAPSHOT SET 명령을 실행하여 새 스냅샷을 만듭니다.
스냅샷 세트¶
*스냅샷 세트*는 특정 데이터베이스, 스키마 또는 테이블에 대한 스냅샷 세트를 포함하는 스키마 수준 오브젝트입니다. Snowflake에는 CREATE, ALTER, DROP, SHOW, DESCRIBE 스냅샷 세트에 대한 SQL 명령이 있습니다.
동일한 오브젝트에 대해 여러 스냅샷 세트를 가질 수 있습니다. 공개 미리 보기 중에는 동일한 오브젝트에 대한 스냅샷 세트 수가 제한됩니다. 자세한 내용은 공개 미리 보기 기간 동안 스냅샷의 제한 사항 섹션을 참조하십시오.
세트 내 스냅샷의 수명 주기는 스냅샷 세트에 연결할 수 있는 선택적 스냅샷 정책*에 의해 결정됩니다. 스냅샷 세트에서 스냅샷을 수동으로 추가하거나 삭제할 수도 있습니다. 스냅샷 삭제 기능은 다른 요소, 특히 *보존 잠금 및 *법적 보존*의 영향을 받습니다.
스냅샷 정책¶
*스냅샷 정책*은 스냅샷 세트 내에서 스냅샷의 수명 주기를 정의하는 설정을 포함하는 스키마 수준 오브젝트입니다. 이러한 설정에는 일정, 만료 및 보존 잠금이 포함됩니다.
*일정*은 스냅샷이 생성되는 시점을 결정합니다. 일정은 분 단위의 간격 또는 cron 표현식으로 정의할 수 있습니다. 예를 들어, 일정이 1시간으로 설정된 경우 오브젝트의 스냅샷은 60분마다 생성됩니다.
*만료 기간*은 스냅샷이 유효한 기간입니다. 스냅샷이 만료된 후 Snowflake는 해당 특정 스냅샷에 법적 보존이 적용되지 않는 한 스냅샷을 자동으로 삭제합니다.
팁
스냅샷 세트에 보존 잠금이 적용되지 않고 특정 스냅샷에 법적 보존이 적용되지 않은 경우 만료 기간이 끝나기 전에 스냅샷을 수동으로 삭제할 수 있습니다. 항상 법적 보존이 적용되지 않은 가장 오래된 스냅샷부터 시작하여 한 번에 하나씩 스냅샷을 수동으로 삭제할 수 있습니다.
각 스냅샷 정책에는 일정 및 만료 기간 속성 중 하나 또는 둘 다 있어야 합니다. 예를 들어, 일정과 만료 기간이 있는 정책을 만들고 Snowflake가 해당 정책이 적용되는 모든 스냅샷 세트에서 스냅샷의 모든 생성 및 제거를 처리하도록 할 수 있습니다. 또는 이전 스냅샷 제거를 직접 관리하려는 경우 일정이 있고 만료 기간이 없는 정책을 생성할 수 있습니다. 또는 만료 기간이 있지만 일정이 없는 정책을 생성한 후 스냅샷 생성을 직접 관리할 수 있습니다. 일정과 만료 기간이 없는 정책은 만들 수 없습니다.
스냅샷 정책을 스냅샷 세트와 연결하는 경우 스냅샷 세트를 생성할 때 연결하거나 나중에 정책을 적용할 수 있습니다. 또는 연결된 스냅샷 정책이 없는 스냅샷 세트를 가질 수 있습니다. 이 경우 새 스냅샷을 생성하고 이전 스냅샷을 만료하는 시점을 수동으로 제어할 수 있습니다.
스냅샷 정책은 여러 스냅샷 세트에 적용할 수 있습니다. 스냅샷 정책을 수정하면 Snowflake에서 정책이 연결된 모든 스냅샷 세트에 변경 사항을 적용합니다.
보존 잠금¶
*보존 잠금*은 정의된 만료 기간 동안 스냅샷이 삭제되지 않도록 보호합니다. 규정 준수 및 사이버 복원력을 위한 백업에 보존 잠금이 설정된 스냅샷을 사용할 수 있습니다. 보존 잠금이 설정된 스냅샷 세트에는 다음 제한 사항이 적용됩니다.
ACCOUNTADMIN 역할을 포함한 어떤 역할도 스냅샷을 삭제할 수 없습니다.
스냅샷 만료 기간을 줄일 수는 없지만 만료 기간을 늘릴 수는 있습니다.
세트에 만료되지 않은 스냅샷이 있는 경우 스냅샷 세트를 삭제할 수 없습니다.
만료되지 않은 스냅샷이 있는 스냅샷 세트가 포함된 스키마는 삭제할 수 없습니다.
만료되지 않은 스냅샷이 있는 스냅샷 세트가 포함된 데이터베이스는 삭제할 수 없습니다.
만료되지 않은 스냅샷이 있는 스냅샷 세트가 있는 데이터베이스가 포함된 계정은 삭제할 수 없습니다.
중요
스냅샷 세트에 보존 잠금이 설정된 스냅샷 정책을 적용하면 되돌릴 수 없습니다. 규정 준수에 필요한 강력한 보장으로 인해 스냅샷 세트에 보존 잠금을 적용한 후에는 잠금을 취소할 수 없습니다. Snowflake 지원도 이러한 보존 잠금을 취소할 수 없습니다. 만료 기간이 긴 스냅샷 세트에 보존 잠금을 설정하기 전에 신중하게 계획하여 삭제할 수 없는 스냅샷 세트 및 이를 포함하는 스키마와 데이터베이스에 예기치 않은 저장소 요금이 부과되지 않도록 하세요.
Snowflake 조직이 삭제되면 해당 조직은 더 이상 Snowflake 고객이 아닙니다. 이 경우 Snowflake는 보존 잠금이 설정된 스냅샷을 포함하여 모든 스냅샷을 삭제합니다. Snowflake 조직을 삭제하려면 Snowflake 지원의 참여가 필요합니다. 관리자가 실수로 삭제할 수 없습니다.
법적 보존¶
Snowflake 스냅샷의 법적 보존 기능은 스냅샷을 덮어쓰거나 삭제하는 것을 방지합니다. 이를 통해 자체 법적 요구 사항에 따라 Snowflake 데이터베이스, 스키마 또는 테이블을 보존할 수 있습니다.
Snowflake를 사용하면 특정 스냅샷에 법적 보존을 설정할 수 있습니다. Snowflake 스냅샷이 법적 보존 상태에 있는 경우 다음 조건이 적용됩니다.
누구도 스냅샷을 수정할 수 없습니다.
누구도 스냅샷을 삭제할 수 없습니다. 이는 스냅샷이 EXPIRE_AFTER_DAYS 기간이 지난 경우에도 마찬가지입니다.
스냅샷에 대한 액세스는 기록되고 감사할 수 있습니다.
보존 잠금과 달리 권한이 있는 사용자는 법적 보존을 제거할 수 있습니다.
중요
스냅샷 세트를 복제하는 경우 해당 스냅샷 세트의 스냅샷에 법적 보존 조치를 취한 후 즉시 새로 고침을 수행해야 합니다. 법적 보존이 포함된 스냅샷 세트를 복제하기 전에 장애 조치를 수행하는 경우, 원래 기본 계정으로 장애 조치할 때 기존의 스냅샷 세트를 덮어쓰게 되어 법적 보존이 삭제될 수 있습니다.
스냅샷 수명 주기 개요¶
다음 다이어그램은 Snowflake 오브젝트, 스냅샷, 스냅샷 세트, 스냅샷 정책이 서로 어떻게 관련되는지 보여줍니다. 이 다이어그램에는 가장 간단한 종류의 스냅샷이 포함됩니다. 하나는 단일 테이블에 대한 스냅샷입니다. 각 백업 작업은 새 스냅샷을 생성합니다. 해당 특정 오브젝트의 모든 스냅샷은 스냅샷 세트로 함께 그룹화됩니다. 스냅샷 세트에서 스냅샷의 자동 추가 및 제거에는 스냅샷 정책이 적용됩니다. 스냅샷에서 정보를 복구하려면 CREATE 명령을 사용하여 . 특정 스냅샷에서 새 오브젝트를 생성합니다.

스냅샷 작동 방식¶
스냅샷은 :doc:`복제본</user-guide/object-clone>`과 유사한 Snowflake 오브젝트의 제로 카피 백업입니다. 스냅샷은 생성될 때 테이블 데이터의 복사본을 만들지 않습니다. 스냅샷 메커니즘은 데이터 복사에 소요되는 추가 비용이나 시간을 발생시키지 않고 테이블 데이터를 백업합니다.
Snowflake는 변경할 수 없는 파일에 데이터를 저장하고 스냅샷에서 테이블의 기초가 되는 데이터 파일에 대한 포인터를 유지 관리합니다. 테이블이 진화하고 수정됨에 따라 Snowflake는 해당 파일을 참조하는 만료되지 않은 스냅샷이 있는 한, 각 데이터 파일이 삭제되지 않도록 보호합니다.
스냅샷에 대한 제한 사항¶
Snowflake는 스냅샷에 대해 다음과 같은 제한 사항을 적용합니다.
스냅샷 정책의 보존 잠금은 수정할 수 없습니다.
정책에 보존 잠금이 있는 경우 만료 기간을 늘릴 수는 있지만 줄일 수는 없습니다.
예약된 스냅샷의 최소 예약 간격은 1시간(60분)입니다.
공개 미리 보기 기간 동안 스냅샷의 제한 사항¶
스냅샷 기능이 일반 공급으로 제공되면 다음 제한 사항이 변경될 수 있습니다.
스냅샷에 대한 정기적인 일정을 설정하면 Snowflake는 예약된 스냅샷의 빈도에 따라 최대 보존 기간을 부과합니다. 스냅샷 정책에서 EXPIRE_AFTER_DAYS속성은 연결된 SCHEDULE속성을 기반으로 제한됩니다.
빈도가 60~119분인 스냅샷 정책의 경우 최대 EXPIRE_AFTER_DAYS 값은 90입니다.
빈도가 120분~23시간 59분인 스냅샷 정책의 경우 최대 EXPIRE_AFTER_DAYS 값은 180입니다.
빈도가 24시간 이상인 스냅샷 정책의 경우 최대 EXPIRE_AFTER_DAYS 값은 366입니다.
일정이 없는 스냅샷 정책의 최대 EXPIRE_AFTER_DAYS 값은 3653입니다.
특정 데이터베이스에 대해 최대 2개의 데이터베이스 스냅샷 세트를 생성할 수 있습니다. 마찬가지로, 특정 스키마에 대해 최대 2개의 스키마 스냅샷 세트를 생성하고 특정 테이블에 대해 최대 2개의 테이블 스냅샷 세트를 생성할 수 있습니다. 오브젝트는 여전히 3개 이상의 스냅샷 세트에 나타날 수 있습니다. 예를 들어, 테이블에는 하나 또는 두 개의 연결된 테이블 스냅샷 세트가 있을 수 있습니다. 동일한 테이블이 하나 또는 두 개의 스키마 스냅샷 세트와 하나 또는 두 개의 데이터베이스 스냅샷 세트에 포함될 수도 있습니다.
스냅샷 정책이 스냅샷 세트에 적용된 후에는 해당 스냅샷 세트에서 정책을 제거할 수 없습니다.
스냅샷과 다른 재해 복구 및 비즈니스 연속성 기능 비교¶
스냅샷은 복제, Time Travel과 같은 다른 비즈니스 연속성 및 재해 복구 기능과 다른 다음과 같은 이점을 제공합니다.
스냅샷에 대한 장기 보존을 활성화할 수 있습니다. 장기 보존은 랜섬웨어 또는 내부 공격과 같은 위협에 대한 복구, 규정 준수, 사이버 복원력에 도움이 됩니다.
보존 잠금을 사용하면 계정 관리자를 포함한 어떤 사용자도 스냅샷을 삭제할 수 없습니다.
복제 새로 고침과 같은 다른 데이터 전송 작업에 사용하는 시간 프레임과 다른 시간 프레임에 스냅샷을 예약할 수 있습니다.
개별 테이블 오브젝트 또는 전체 스키마나 데이터베이스와 같은 컨테이너 오브젝트의 스냅샷을 생성하고 복원할 수 있습니다.
보존 잠금이 포함된 스냅샷 정책을 사용하여 백업이 수행된 후 백업 보존 시간이 단축되는 것을 방지할 수 있습니다. 이는 보존 간격을 0으로 줄일 수 있는 Time Travel 기능과 다릅니다.
Time Travel 및 Fail-safe와 달리, 스냅샷은 테이블 및 테이블 데이터보다 더 많은 유형의 오브젝트에서 데이터를 보존합니다.
백업을 수행하는 속도와 저장소 효율성은 복제에 사용되는 제로 카피 메커니즘과 유사합니다.
동일한 오브젝트의 모든 스냅샷이 스냅샷 세트로 그룹화되는 방식을 사용하면 복제본을 사용하여 자체 백업 메커니즘을 구현하는 것보다 관리가 더 간단해집니다. 예를 들어, 많은 수의 오브젝트를 관리하거나, 복제된 오브젝트를 추적하는 명명 체계를 고안하거나, 오래된 복제본을 삭제하기 위한 예약 메커니즘을 구현할 필요가 없습니다. 또한, 복제된 오브젝트와 달리 스냅샷을 생성한 후에는 수정할 수 없습니다.
각 스냅샷은 지정된 시점의 단일 테이블, 스키마 또는 데이터베이스를 나타냅니다. 스냅샷에는 사용자 또는 역할과 같은 계정 수준 오브젝트가 포함되지 않습니다. 일부 종류의 테이블과 기타 데이터베이스 수준 오브젝트는 스키마 및 데이터베이스 스냅샷에 포함되지 않습니다. 자세한 내용은 :ref:`스냅샷 오브젝트<label-snapshot_objects>`를 참조하세요.
스냅샷 관련 오브젝트는 동일한 클라우드 서비스 공급자(CSP) 리전을 연결된 데이터베이스, 스키마 또는 테이블로 사용합니다. 비즈니스 연속성 및 재해 복구 시나리오의 경우 일반적으로 스냅샷을 Snowflake 계정 복제와 결합합니다. 이를 통해 모든 스냅샷 세트와 스냅샷 정책을 다른 지역이나 다른 CSP에 복제하고 원래 리전이나 CSP에 영향을 미치는 중단이 발생하더라도 복구할 수 있습니다.
스냅샷 세트 및 스냅샷 정책은 복제할 수 없습니다. 이러한 오브젝트가 포함된 스키마 또는 데이터베이스를 복제하는 경우, 복제된 스키마 또는 데이터베이스에는 해당 오브젝트가 포함되지 않습니다.
스냅샷 오브젝트¶
테이블, 스키마 및 데이터베이스에 대한 스냅샷 세트를 생성할 수 있습니다.
테이블에서 다른 오브젝트로의 참조¶
뷰 또는 함수와 같은 오브젝트는 스냅샷에서 스키마 또는 데이터베이스 외부의 오브젝트를 참조할 수 있습니다. 스냅샷에서 복원한 후에도 이러한 참조가 계속 작동하도록 하려면 다음 전략 중 하나를 사용합니다.
테이블과 테이블이 참조하는 다른 오브젝트가 모두 동일한 스키마 또는 동일한 데이터베이스에 있는 경우 전체 스키마 또는 데이터베이스에 대한 스냅샷 세트를 생성합니다. 이를 통해 스냅샷에서 복원할 때 Snowflake가 상호 연결된 모든 오브젝트를 한 번에 복원합니다.
스냅샷 세트의 오브젝트가 스냅샷 세트에 포함되지 않은 오브젝트를 참조하는 경우, 스냅샷이 복원될 때 복원된 오브젝트의 참조가 다른 데이터베이스 또는 스키마의 원래 오브젝트를 가리킵니다. 스냅샷을 만든 후 다른 오브젝트를 삭제했거나 해당 속성을 변경한 경우 복원된 오브젝트에 액세스할 때 오류가 발생할 수 있습니다.
계정 수준 오브젝트의 경우 복원된 오브젝트의 모든 참조는 항상 원래 계정 수준 오브젝트를 가리킵니다. 이는 계정 수준 오브젝트가 스냅샷의 일부가 아니기 때문입니다. 예를 들어, 스키마 스냅샷에는 보안 통합을 참조하는 시크릿이 포함될 수 있습니다. 보안 통합은 계정 수준 오브젝트이며 어떤 스냅샷에도 포함될 수 없습니다.
데이터베이스 및 스키마 스냅샷의 오브젝트 유형¶
다음 테이블에는 데이터베이스 또는 스키마 스냅샷에 포함된 오브젝트가 나열되어 있습니다.
오브젝트 |
스냅샷에 포함됨 |
참고 |
---|---|---|
영구 테이블 |
예 |
테이블에 대한 Time Travel 정보는 스냅샷의 일부로 저장되지 않습니다. |
일시적 테이블 |
예 |
이러한 테이블은 복원한 후에도 계속해서 일시적 테이블로 유지됩니다. 일시적 스키마와 일시적 데이터베이스는 복원 후에도 일시적 속성을 유지합니다. |
임시 테이블 |
아니요 |
임시 테이블은 세션 범위이며 스냅샷에 포함되지 않습니다. |
동적 테이블 |
예 |
동적 테이블에는 스냅샷을 위한 자체 데이터 정의 언어(DDL) 구문이 있습니다. CREATE SNAPSHOT SET FOR DYNAMIC TABLE 및 CREATE DYNAMIC TABLE FROM SNAPSHOT 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 SNAPSHOT SETS의 출력은 이름이 변경된 오브젝트의 OBJECT_NAME 값을 반영하도록 변경됩니다.
테이블을 백업하고 싶지만 CREATE OR REPLACE 문을 통해 해당 테이블을 자주 삭제하고 다시 만드는 경우 테이블이 포함된 스키마 또는 데이터베이스에 대한 스냅샷 세트에 이를 포함합니다. 이를 통해 테이블의 변경 사항에 관계없이 동일한 스냅샷 세트를 계속 사용할 수 있습니다.
스냅샷에서 테이블을 복원할 때 복원된 테이블은 기존 이름과 다른 이름으로 시작합니다. 기존 테이블의 내용을 스냅샷 데이터로 완전히 바꾸고 동일한 테이블의 더 많은 백업을 위해 동일한 스냅샷 세트를 계속 사용한다고 가정해 보겠습니다. 이 경우 TRUNCATE 또는 DELETE 문을 사용하여 기존 테이블의 내용을 제거하고 INSERT … SELECT 문을 사용하여 복원된 테이블에서 데이터를 복사합니다. 기존 테이블을 삭제하고 복원된 테이블의 이름을 기존 테이블의 이름으로 바꾸지 마세요.
스냅샷 및 암호화¶
스냅샷 세트 내의 데이터는 다른 Snowflake 오브젝트 및 테이블 데이터와 동일한 엔드 투 엔드 암호화로 보호됩니다. Snowflake 암호화에 대한 자세한 내용은 Snowflake의 종단 간 암호화 이해하기 섹션을 참조하세요.
키 순환은 스냅샷 내의 데이터에도 적용됩니다.
스냅샷 및 데이터 계보¶
Snowflake는 데이터 계보 메타데이터를 데이터베이스, 스키마 및 테이블 스냅샷과 함께 보존하지 않습니다. 스냅샷에서 오브젝트를 복원한 후에는 |sf-web-interface|를 사용하여 복원된 데이터에 대한 계보 정보를 볼 수 있습니다.
스냅샷 비용¶
다음 테이블은 스냅샷 요금을 설명합니다.
비용 구성 요소 |
설명 |
공개 미리 보기 중에 청구됨 |
---|---|---|
스냅샷 컴퓨팅 |
Snowflake 관리형 컴퓨팅 서비스는 예약된 스냅샷 생성 및 만료를 생성합니다. |
예 |
컴퓨팅 복원 |
Snowflake 관리형 웨어하우스는 스냅샷에서 오브젝트를 복원하는 데 사용됩니다. |
예 |
스냅샷 저장소 |
스냅샷 데이터를 저장하기 위한 Snowflake 관리형 클라우드 오브젝트 저장소입니다. |
복제본에서 보존된 바이트와 유사하게, 스냅샷에서 보존된 바이트에 대해 청구됩니다. |
TABLE_STORAGE_METRICS 뷰에서 RETAINED_FOR_CLONE_BYTES
열을 사용하여 스냅샷 저장소 비용을 모니터링할 수 있으며 SNAPSHOT_STORAGE_USAGE 뷰에서도 모니터링할 수 있습니다.
액세스 제어 권한¶
다음 테이블에는 스냅샷을 관리하고 사용하기 위해 권한이 부여된 오브젝트 유형과 권한이 나열되어 있습니다.
권한 |
오브젝트 타입 |
설명 |
---|---|---|
CREATE SNAPSHOT POLICY |
스키마 |
스키마에서 스냅샷 정책을 생성할 수 있는 권한을 부여합니다. 이 권한을 부여하는 역할에는 스키마에 대한 USAGE 권한도 있습니다. |
CREATE SNAPSHOT SET |
스키마 |
스키마에서 스냅샷 세트를 생성할 수 있는 권한을 부여합니다. 이 권한을 부여하는 역할에는 스키마에 대한 USAGE 권한도 있습니다. 스냅샷 세트를 실제로 생성하려면 스냅샷 세트의 주체인 오브젝트에 대한 적절한 권한도 필요합니다. 테이블 스냅샷의 경우 SELECT, 스키마 스냅샷 또는 데이터베이스 스냅샷의 경우 USAGE입니다. |
APPLY |
스냅샷 정책 |
특정 스냅샷 정책을 적용할 수 있는 권한을 부여합니다. ACCOUNTADMIN 역할의 사용자만 이 권한을 부여할 수 있습니다. |
APPLY SNAPSHOT RETENTION LOCK |
계정 |
보존 잠금이 설정된 스냅샷 정책을 만들고 적용할 수 있는 권한을 부여합니다. 이 권한은 ACCOUNTADMIN 역할에 부여되며, 위임할 수 있습니다. 이 권한은 다음을 수행할 수 있는 역할을 활성화하는 데 필요합니다.
|
APPLY LEGAL HOLD |
계정 |
스냅샷에서 법적 보존을 추가하거나 제거할 수 있는 권한을 부여합니다. 기본적으로 ACCOUNTADMIN 역할에는 이 권한이 있습니다. |
스냅샷 정책 및 세트 생성에 필요한 권한 부여하기¶
참고
이러한 권한을 부여하는 데 사용되는 역할에는 스키마에 대한 OWNERSHIP 권한이 있어야 하거나 CREATE SNAPSHOT SET 또는 CREATE SNAPSHOT POLICY 권한과 WITH GRANT OPTION이 있어야 합니다.
사용자 지정 계정 역할 또는 데이터베이스 역할에 다음 권한을 부여할 수 있습니다.
myrole
역할을 활성화하려면 스키마 ``myschema``에서 스냅샷 정책을 생성하기 위해 다음 문을 실행합니다.
GRANT CREATE SNAPSHOT POLICY ON SCHEMA policy_schema TO ROLE myrole;
myrole
역할을 활성화하려면 스키마 ``myschema``에서 스냅샷 세트를 생성하기 위해 다음 문을 실행합니다.
GRANT CREATE SNAPSHOT SET ON SCHEMA policy_schema TO ROLE myrole;
역할에 스냅샷 정책에 대한 APPLY 권한 부여하기¶
참고
ACCOUNTADMIN 역할의 사용자만 이 권한을 부여할 수 있습니다.
이 권한은 사용자 지정 계정 역할 또는 데이터베이스 역할에 부여할 수 있습니다.
myrole
역할이 스냅샷 세트에 스냅샷 정책 ``hourly_snapshot_policy``를 적용할 수 있도록 하려면 다음 문을 실행합니다.
GRANT APPLY ON SNAPSHOT POLICY hourly_snapshot_policy TO ROLE myrole;
역할에 APPLY SNAPSHOT RETENTION LOCK 권한 부여하기¶
스냅샷 세트에 보존 잠금이 설정된 스냅샷 정책을 적용할 권한을 역할에 부여할 수 있습니다.
ACCOUNTADMIN 역할의 사용자만 이 권한을 부여할 수 있습니다.
중요
스냅샷 세트에 보존 잠금이 설정된 스냅샷 정책을 적용하면 되돌릴 수 없습니다. 규정 준수에 필요한 강력한 보장으로 인해 스냅샷 세트에 보존 잠금을 설정한 후에는 잠금을 취소할 수 없습니다. Snowflake 지원도 이러한 보존 잠금을 취소할 수 없습니다. 보존 잠금이 적용된 상태로 생성된 스냅샷은 만료 기간이 끝날 때까지 삭제할 수 없습니다.
Snowflake 조직이 삭제되면 해당 조직은 더 이상 Snowflake 고객이 아닙니다. 이 경우 Snowflake는 보존 잠금이 설정된 스냅샷을 포함하여 모든 스냅샷을 삭제합니다.
retention_lock_admin_role
역할이 스냅샷 세트에 보존 잠금이 있는 스냅샷 정책을 적용할 수 있도록 하려면 다음 문을 실행합니다.
GRANT APPLY SNAPSHOT RETENTION LOCK ON ACCOUNT TO ROLE retention_lock_admin_role;
스냅샷 생성 및 구성하기¶
이 섹션에서는 스냅샷을 만들고 복원하는 워크플로의 예제를 제공합니다.
예약된 스냅샷 만들기¶
일정에 따라 스냅샷을 자동으로 생성하는 스냅샷 세트를 생성합니다.
CREATE SNAPSHOT POLICY 명령을 사용하여 스냅샷 정책을 생성합니다. 예를 들어, 다음 정책은 스냅샷 세트가 생성된 시점부터 매시간 스냅샷을 생성합니다. 각 스냅샷은 90일 후에 만료됩니다.
CREATE SNAPSHOT POLICY hourly_snapshot_policy SCHEDULE = '60 MINUTE' EXPIRE_AFTER_DAYS = 90 COMMENT = 'Hourly backups expire after 90 days';
스냅샷 정책 ``hourly_snapshot_policy``를 사용하여 테이블 ``t1``에 대한 스냅샷 세트를 만듭니다.
CREATE SNAPSHOT SET t1_snapshots FOR TABLE t1 WITH SNAPSHOT POLICY hourly_snapshot_policy;
스냅샷 정책 ``hourly_snapshot_policy``를 사용하여 스키마 ``s1``에 대한 스냅샷 세트를 만듭니다.
CREATE SNAPSHOT SET s1_snapshots FOR SCHEMA s1 WITH SNAPSHOT POLICY hourly_snapshot_policy;
스냅샷 정책 ``hourly_snapshot_policy``를 사용하여 데이터베이스 ``d1``에 대한 스냅샷 세트를 만듭니다.
CREATE SNAPSHOT SET d1_snapshots FOR DATABASE d1 WITH SNAPSHOT POLICY hourly_snapshot_policy;
보존 잠금이 설정된 예약된 스냅샷 만들기¶
일정에 따라 보존 잠금이 설정된 스냅샷을 자동으로 생성하는 스냅샷 세트를 생성합니다. 보존 잠금은 권한이 있는 사용자를 포함하여 누구나 정책이 연결된 스냅샷 세트의 스냅샷을 삭제하거나 수정하는 것을 방지합니다.
계정에 대한 APPLY SNAPSHOT RETENTION LOCK 권한이 있는 역할만 보존 잠금이 설정된 스냅샷 정책을 생성할 수 있습니다.
중요
스냅샷 세트에 보존 잠금이 설정된 스냅샷 정책을 적용하면 되돌릴 수 없습니다. 규정 준수에 필요한 강력한 보장으로 인해 스냅샷 세트에 보존 잠금을 설정한 후에는 잠금을 취소할 수 없습니다. Snowflake 지원도 이러한 보존 잠금을 취소할 수 없습니다. 보존 잠금이 적용된 상태로 생성된 스냅샷은 만료 기간이 끝날 때까지 삭제할 수 없습니다.
Snowflake 조직이 삭제되면 해당 조직은 더 이상 Snowflake 고객이 아닙니다. 이 경우 Snowflake는 보존 잠금이 설정된 스냅샷을 포함하여 모든 스냅샷을 삭제합니다.
만료 기간이 90일인 일일 스냅샷을 생성하는 보존 잠금이 설정된 정책을 만듭니다.
CREATE SNAPSHOT POLICY daily_snapshot_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';
스냅샷 정책 ``daily_snapshot_policy_with_lock``를 사용하여 테이블 ``t2``에 대한 스냅샷 세트를 만듭니다.
CREATE SNAPSHOT SET t2_snapshots FOR TABLE t2 WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
스냅샷 정책 ``daily_snapshot_policy_with_lock``를 사용하여 스키마 ``s2``에 대한 스냅샷 세트를 만듭니다.
CREATE SNAPSHOT SET s2_snapshots FOR SCHEMA s2 WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
스냅샷 정책 ``daily_snapshot_policy_with_lock``를 사용하여 데이터베이스 ``d2``에 대한 스냅샷 세트를 만듭니다.
CREATE SNAPSHOT SET d2_snapshots FOR DATABASE d2 WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
수동으로 스냅샷 만들기¶
언제든지 스냅샷 세트에 스냅샷을 수동으로 추가할 수 있습니다. 그러면 스냅샷 세트와 연결된 데이터베이스, 스키마 또는 테이블의 스냅샷이 만들어집니다. 스냅샷 세트에 스냅샷 정책에 의해 예약된 스냅샷 또한 있는지 여부에 관계없이 스냅샷을 수동으로 생성할 수 있습니다. 스냅샷 세트와 연결된 스냅샷 정책이 있고 정책이 만료 기간을 정의하는 경우 해당 만료 기간은 수동 스냅샷에도 적용됩니다.
다음 예제에서는 테이블 스냅샷 세트 ``t1_snapshots``를 생성한 후 첫 번째 스냅샷을 여기에 추가합니다.
CREATE SNAPSHOT SET t1_snapshots FOR TABLE t1;
ALTER SNAPSHOT SET t1_snapshots ADD SNAPSHOT;
다음 예제에서는 매시간 백업을 포함하는 스냅샷 정책, 해당 정책을 사용하는 테이블 스냅샷 세트 ``t2_snapshots``를 생성한 후 스냅샷 세트에 수동 스냅샷을 추가합니다.
CREATE SNAPSHOT POLICY hourly_snapshot_policy
SCHEDULE = '60 MINUTE'
EXPIRE_AFTER_DAYS = 7;
CREATE SNAPSHOT SET t2_snapshots FOR TABLE t2 WITH SNAPSHOT POLICY hourly_snapshot_policy;
-- Wait several hours. Then the snapshot set already contains several scheduled snapshots.
-- You can manually add a snapshot at any time, in addition to the scheduled snapshots.
ALTER SNAPSHOT SET t2_snapshots ADD SNAPSHOT;
유사한 명령을 실행하여 스키마 또는 데이터베이스 스냅샷 세트에 스냅샷을 추가할 수 있습니다. ALTER SNAPSHOT SET 명령에 설정된 스키마 또는 데이터베이스 스냅샷의 이름을 바꿉니다.
스냅샷 세트에 대한 스냅샷 정책 일시 중단¶
스냅샷 세트에 대한 스냅샷 정책을 일시 중단하면 해당 스냅샷 세트에서 새 예약된 스냅샷을 생성하는 데 스냅샷 정책이 사용되지 못하게 됩니다. 또한 스냅샷 정책을 사용하는 해당 스냅샷 세트에서 기존 스냅샷의 만료를 일시 중단합니다. 동일한 정책을 사용하는 다른 스냅샷 세트는 영향을 받지 않습니다.
다음 예제에서는 스냅샷 세트 ``t2_snapshots``에 대한 스냅샷 정책을 일시 중단합니다.
ALTER SNAPSHOT SET t2_snapshots SUSPEND SNAPSHOT POLICY;
ALTER SNAPSHOT SET 명령에 대한 자세한 내용은 ALTER SNAPSHOT SET 섹션을 참조하십시오.
스냅샷 세트에 대한 스냅샷 정책 재개¶
일시 중단된 스냅샷 정책은 재개할 수 있습니다. 그러면 스냅샷 정책에 따라 스냅샷 생성 및 만료가 재개됩니다. 정책이 일시 중단된 동안 스냅샷이 만료 시간에 도달한 경우 Snowflake는 정책이 재개되는 즉시 해당 스냅샷을 삭제합니다.
다음 예제에서는 스냅샷 세트 ``t1_snapshot``에 대한 스냅샷 정책을 재개합니다.
ALTER SNAPSHOT SET t1_snapshots RESUME SNAPSHOT POLICY;
ALTER SNAPSHOT SET 명령에 대한 자세한 내용은 ALTER SNAPSHOT SET 섹션을 참조하십시오.
스냅샷 복원하기¶
특정 스냅샷의 ID를 사용하여 스냅샷 세트에서 오브젝트를 복원할 수 있습니다. 예를 들어, 현재 스키마의 스냅샷 세트 ``t1_snapshots``에서 테이블 ``t1``을 복원하려면 다음 문을 실행합니다.
snapshot_id
열에서 복원할 테이블 스냅샷의 ID를 찾습니다.SHOW SNAPSHOTS IN SNAPSHOT SET t1_snapshots ->> SELECT "created_on", "snapshot_id", "expire_on" FROM $1;
+-------------------------------+--------------------------------------+-------------------------------+ | created_on | snapshot_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 | +-------------------------------+--------------------------------------+-----------+-------------------+
snapshot_id
열에서 복원할 스키마 스냅샷의 ID를 찾습니다.SHOW SNAPSHOTS IN SNAPSHOT SET s1_snapshots;
+-------------------------------+--------------------------------------+-------------------------------+ | created_on | snapshot_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 | +-------------------------------+--------------------------------------+-------------------------------+
snapshot_id
열에서 복원할 데이터베이스 스냅샷의 ID를 찾습니다.SHOW SNAPSHOTS IN SNAPSHOT SET d1_snapshots;
+-------------------------------+--------------------------------------+-------------------------------+ | created_on | snapshot_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 | +-------------------------------+--------------------------------------+-------------------------------+
2024-08-19 18:12:33에 생성된 테이블 ``t1``의 스냅샷을 복원합니다.
CREATE TABLE restored_t1 FROM SNAPSHOT SET t1_snapshots IDENTIFIER 'b5624ef0-1f35-452f-b132-09d8f0592e52';
2024-08-19 18:12:33에 생성된 스키마 ``s1``의 스냅샷을 복원합니다.
CREATE SCHEMA restored_s1 FROM SNAPSHOT SET s1_snapshots IDENTIFIER '8dbcf919-3393-4590-928f-5481d7f2502f';
2024-08-19 18:12:33에 생성된 데이터베이스 ``d1``의 스냅샷을 복원합니다.
CREATE DATABASE restored_d1 FROM SNAPSHOT SET d1_snapshots IDENTIFIER '29c2c1b9-6599-4f0b-87b8-d43377fd7c77';
스냅샷 세트에서 스냅샷 삭제하기¶
모든 스냅샷 세트에 대해 법적 보존 조치가 설정되지 않은 가장 오래된 스냅샷만 삭제할 수 있습니다. 스냅샷 ID를 지정하여 삭제합니다. is_under_legal_hold
속성을 검사하여 법적 보존이 설정되지 않은 스냅샷을 찾을 수 있습니다. created_on
속성을 검사하여 가장 오래된 스냅샷을 찾을 수 있습니다.
참고
보존 잠금이 설정된 스냅샷 정책이 해당 스냅샷 세트에 연결되어 있거나 특정 스냅샷에 법적 보존이 설정된 경우 스냅샷 세트에서 스냅샷을 삭제할 수 없습니다.
스냅샷 세트에서 삭제하는 스냅샷은 세트에서 가장 빠른 스냅샷이어야 합니다.
다음 출력의
snapshot_id
열에서 삭제할 테이블 스냅샷의 ID를 찾습니다.created_on
열을 기준으로 오름차순으로 정렬하면 가장 오래된 스냅샷이 먼저 표시됩니다. SELECT 명령에 ``LIMIT 1``을 추가하여 가장 오래된 스냅샷의 세부 정보가 있는 행만 반환할 수 있습니다.SHOW SNAPSHOTS IN SNAPSHOT SET t1_snapshots ->> SELECT "created_on", "snapshot_id", "expire_on" FROM $1 WHERE "is_under_legal_hold" = 'N' ORDER BY "created_on";
+-------------------------------+--------------------------------------+-------------------------------+ | created_on | snapshot_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 | +-------------------------------+--------------------------------------+-------------------------------+
snapshot_id``를 사용하여 2024-08-19 17:12:28에 생성된 ``t1_snapshots
스냅샷을 삭제합니다.ALTER SNAPSHOT SET t1_snapshots DELETE SNAPSHOT IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
다음 출력의
snapshot_id
열에서 삭제할 스키마 스냅샷의 ID를 찾습니다.SHOW SNAPSHOTS IN SNAPSHOT SET s1_snapshots ->> SELECT "created_on", "snapshot_id", "expire_on" FROM $1 ORDER BY "created_on";
+-------------------------------+--------------------------------------+-------------------------------+ | created_on | snapshot_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 | +-------------------------------+--------------------------------------+-------------------------------+
snapshot_id``를 사용하여 2024-08-19 17:12:28에 생성된 ``s1_snapshots
스냅샷을 삭제합니다.ALTER SNAPSHOT SET s1_snapshots DELETE SNAPSHOT IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
다음 출력의
snapshot_id
열에서 삭제할 데이터베이스 스냅샷의 ID를 찾습니다.SHOW SNAPSHOTS IN SNAPSHOT SET d1_snapshots ->> SELECT "created_on", "snapshot_id", "expire_on" FROM $1 ORDER BY "created_on";
+-------------------------------+--------------------------------------+-------------------------------+ | created_on | snapshot_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 | +-------------------------------+--------------------------------------+-------------------------------+
snapshot_id``를 사용하여 2024-08-19 17:12:28에 생성된 ``d1_snapshots
스냅샷을 삭제합니다.ALTER SNAPSHOT SET d1_snapshots DELETE SNAPSHOT IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
2024-08-19 21:12:55에 생성된 최신
d1_snapshots
스냅샷을 삭제하려고 시도합니다. Snowflake는 스냅샷 세트에서 가장 오래된 스냅샷을 제외한 다른 스냅샷의 삭제를 차단한다는 점을 유의하세요.ALTER SNAPSHOT SET d1_snapshots DELETE SNAPSHOT IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
Snapshot '28e12b8a-aab8-40a8-ae39-9a5a5f654d66' cannot be deleted as it is not the oldest active snapshot in the snapshot set D1_SNAPSHOTS.
스냅샷 세트 삭제하기¶
DROP SNAPSHOT SET 명령을 사용하여 스냅샷 세트를 삭제할 수 있습니다.
참고
보존 잠금이 설정되어 있고 만료되지 않은 스냅샷이 포함된 스냅샷 세트는 삭제할 수 없습니다. 또한 스냅샷에 법적 보존 조치가 설정된 스냅샷 세트가 있는 경우에도 스냅샷 세트를 삭제할 수 없습니다.
t1_snapshots
스냅샷 세트를 삭제합니다.
DROP SNAPSHOT SET t1_snapshots;
s1_snapshots
스냅샷 세트를 삭제합니다.
DROP SNAPSHOT SET s1_snapshots;
d1_snapshots
스냅샷 세트를 삭제합니다.
DROP SNAPSHOT SET d1_snapshots;
특정 테이블의 백업이 포함된 모든 스냅샷 세트 찾기¶
다음 예제에서는 특정 스키마와 데이터베이스 내부에 특정 테이블이 포함된 모든 스냅샷 세트를 찾는 방법을 보여줍니다. SHOW TABLES 명령은 파이프 연산자를 사용하여 데이터베이스, 스키마, 테이블의 이름을 검색하고 변수에 저장합니다. SHOW SNAPSHOT SETS 출력은 테이블이 포함된 데이터베이스나 테이블이 포함된 스키마를 백업하는 스냅샷 세트 또는 해당 단일 테이블을 포함하는 스냅샷 세트를 표시하도록 필터링됩니다.
SHOW SNAPSHOT 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 SNAPSHOT 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);
+-------------+------------------+---------------------------+-------------+---------------------------+
| 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');
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 SNAPSHOT SET dependency_experiments FOR TABLE dependent_table;
ALTER SNAPSHOT SET dependency_experiments ADD SNAPSHOT;
SHOW SNAPSHOTS IN SNAPSHOT SET dependency_experiments;
SHOW SNAPSHOTS 출력에는 복원 작업에 사용할 snapshot_id
값이 포함되어 있습니다.
+-------------------------------+--------------------------------------+------------------------+---------------------------+--------------+-----------+
| created_on | snapshot_id | snapshot_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 SNAPSHOT SET dependency_experiments
IDENTIFIER '0fd44138-b571-449b-be0a-72779501f80e';
SELECT GET_DDL('TABLE','restored_dependent_table');
+----------------------------------------------------+
| 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 SNAPSHOT SET dependency_experiments
IDENTIFIER '0fd44138-b571-449b-be0a-72779501f80e';
SELECT * FROM restored_dependent_table;
테이블 쿼리는 여전히 작동합니다.
+----+------------+
| ID | FOREIGN_ID |
|----+------------|
+----+------------+
0 Row(s) produced. Time Elapsed: 0.129s
그러나 GET_DDL(), DESCRIBE 및 INSERT와 같은 작업은 더 이상 존재하지 않는 시퀀스에 의존하기 때문에 모두 실패합니다.
SELECT GET_DDL('TABLE','restored_dependent_table');
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;
+------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------+
| 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);
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 SNAPSHOT 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 SNAPSHOT SET dynamic_table_snapshots
FOR DYNAMIC TABLE my_dynamic_table;
ALTER SNAPSHOT SET dynamic_table_snapshots ADD SNAPSHOT;
다음 예제에서는 다양한 시간에 생성된 스냅샷에 대한 스냅샷 IDs를 확인하는 방법을 보여줍니다. 이 경우 최신 스냅샷이 결과 세트의 첫 번째 행입니다. 그런 다음 CREATE DYNAMIC TABLE 명령에서 스냅샷의 ID를 사용합니다.
SHOW SNAPSHOTS IN SNAPSHOT SET dynamic_table_snapshots
->> SELECT "created_on", "snapshot_id" FROM $1
ORDER BY "created_on" DESC;
CREATE DYNAMIC TABLE restored_dynamic_table
FROM SNAPSHOT SET dynamic_table_snapshots
IDENTIFIER '<snapshot_id_from_SHOW_SNAPSHOTS_output>';
팁
스냅샷에서 동적 테이블을 복원하면 Snowflake는 첫 번째 새로 고침 중에 새 테이블을 :ref:`자동으로 초기화<label-dynamic_tables_initialization>`합니다.
법적 보존 추가 및 제거하기¶
Snowflake 스냅샷에 대한 법적 보존 작업을 수행하기 전에 해당 목적과 요구 사항에 대해 알아봅니다. 자세한 내용은 법적 보존 섹션을 참조하십시오.
조직의 법률 또는 규정 준수 팀에서 보존해야 하는 데이터 유형을 지정하는 소송 자료 보호 요청을 전송한다고 가정해 보겠습니다. 이 경우 다음과 같은 프로세스를 따를 수 있습니다.
법무팀과 협력하여 관련 데이터가 저장되는 위치와 관련 오브젝트가 포함된 스냅샷 세트를 식별합니다.
스냅샷 세트 내에서 해당 기간의 스냅샷에 법적 보존 조치를 취합니다. 그러면 해당 스냅샷의 자동 만료가 비활성화됩니다. Snowflake가 일정에 따라 자동으로 생성했거나 수동으로 생성한 스냅샷에 법적 보존 조치를 취할 수 있습니다. 법적 보존은 스냅샷 세트에 연결된 스냅샷 정책, 만료 기간 또는 보존 잠금이 있는지 여부에 관계없이 적용됩니다.
스냅샷 세트가 포함된 데이터베이스가 복제되는 모든 보조 계정에 대해 새로 고침 작업을 수행합니다. 이를 통해 모든 장애 조치 및 장애 복구 작업에서 법적 보존 및 관련 스냅샷이 보존됩니다.
Snowflake 액세스 제어 및 로그를 사용하여 법적 보존 조치가 설정된 데이터에 대한 액세스를 감사합니다.
법적 사례가 종료되고 법무팀이 법적 보존 조치의 제거를 승인하면 APPLY LEGAL HOLD 권한이 있는 사용자가 법적 보존을 해제합니다. 그런 다음 만료에 대한 일반적인 자동화가 재개됩니다.
이 예제에서는 특정 스냅샷 세트 내의 스냅샷에 대한 법적 보존 수명 주기 동안 사용할 수 있는 SQL 명령 시퀀스를 보여줍니다. SHOW SNAPSHOTS IN SNAPSHOT SET 명령을 사용하여 관련 스냅샷의 식별자를 찾고 "is_under_legal_hold"
열을 확인하여 법적 보존이 이미 설정되어 있는지 확인합니다. 그런 다음 특정 스냅샷에서 법적 보존을 추가하거나 제거합니다.
USE ROLE <role_name>; -- use a role that has the APPLY LEGAL HOLD privilege
SHOW SNAPSHOTS IN SNAPSHOT SET <snapshot_set_name>
->> SELECT * FROM $1 WHERE "is_under_legal_hold" = 'N';
ALTER SNAPSHOT SET <snapshot_set_name>
MODIFY SNAPSHOT IDENTIFIER '<snapshot_identifier>'
ADD LEGAL HOLD;
USE ROLE <role_name>; -- use a role that has the APPLY LEGAL HOLD privilege
SHOW SNAPSHOTS IN SNAPSHOT SET <snapshot_set_name>
->> SELECT * FROM $1 WHERE "is_under_legal_hold" = 'Y';
ALTER SNAPSHOT SET <snapshot_set_name>
MODIFY SNAPSHOT IDENTIFIER '<snapshot_identifier>'
REMOVE LEGAL HOLD;
팁
INFORMATION_SCHEMA.SNAPSHOTS 또는 ACCOUNT_USAGE.SNAPSHOTS 뷰에서 "is_under_legal_hold"
열을 쿼리하여 법적 보존의 존재 여부를 확인할 수도 있습니다.
스냅샷 및 스냅샷 작업 모니터링하기¶
다음 뷰를 쿼리하여 존재하는 스냅샷 관련 오브젝트, 해당 속성, 사용하는 저장소의 양을 확인할 수 있습니다.
Information Schema:
Account Usage:
SQL 참조 항목¶
스냅샷 정책¶
스냅샷 세트¶
스냅샷¶
실제 CREATE SNAPSHOT 명령을 실행하지 않습니다. 새 스냅샷을 생성하려면 ALTER SNAPSHOT SET … ADD SNAPSHOT을 실행합니다. 또는 스냅샷 세트를 일정이 있는 스냅샷 정책과 연결하면 Snowflake에서 지정된 일정에 따라 스냅샷 세트에 스냅샷을 자동으로 생성합니다. 이전 스냅샷을 삭제하려면 ALTER SNAPSHOT SET … DELETE SNAPSHOT을 실행합니다. 이러한 작업을 수행하려면 특정 스냅샷의 식별자를 지정해야 합니다. 다음 명령을 사용하여 각 스냅샷이 생성된 시점과 같은 기타 정보와 함께 스냅샷 식별자를 찾을 수 있습니다.
스냅샷에서 오브젝트 복원하기¶
CREATE object_kind
FROM SNAPSHOT SET 구문을 사용하여 적절한 종류의 스냅샷 세트에서 각 종류의 오브젝트를 복원합니다.
스냅샷 세트의 추가 스냅샷은 복원된 오브젝트가 아닌 기존 오브젝트를 사용합니다. 복원된 오브젝트의 이름을 기존 오브젝트와 동일한 이름으로 바꾸더라도 마찬가지입니다. 복원을 수행한 후 동일한 스냅샷 세트를 계속 사용하려면 오브젝트를 새 이름으로 복원한 후 데이터를 기존 오브젝트로 다시 전송합니다.
뷰¶
다음 시스템 뷰에는 스냅샷, 스냅샷 세트 및 스냅샷 정책과 관련된 메타데이터가 포함되어 있습니다.
Information Schema 뷰¶
INFORMATION_SCHEMA 스키마의 이러한 뷰에는 현재 존재하는 스냅샷 관련 오브젝트에 대한 정보가 포함되어 있습니다.
Account Usage 뷰:¶
ACCOUNT_USAGE 스키마의 이러한 뷰에는 존재하거나 삭제된 스냅샷 관련 오브젝트, 스냅샷에서 수행된 작업, 스냅샷이 사용하는 저장소에 대한 정보가 포함되어 있습니다.