Instantanés pour les sauvegardes et le stockage immuable

Les instantanés aident les organisations à protéger les données critiques contre les modifications ou les suppressions.

Les instantanés représentent des sauvegardes discrètes des objets Snowflake. Vous choisissez quels objets sauvegarder, à quelle fréquence les sauvegarder, combien de temps conserver les sauvegardes et s’il faut ajouter un verrou de rétention afin qu’elles ne puissent pas être supprimées prématurément.

Cas d’utilisation instantanés

Les cas d’utilisation suivants sont typiques des applications des instantanés :

Conformité réglementaire:

Les instantanés avec verrou de rétention aident les organisations, les institutions financières et les secteurs connexes à se conformer aux réglementations qui imposent la conservation des enregistrements dans un format immuable.

Important

La fonctionnalité en prévisualisation publique n’est certifié pour aucune réglementation spécifique. Snowflake a l’intention d’obtenir une certification de conformité lorsque cette fonctionnalité sera disponible de manière générale.

Récupération:

Les instantanés aident les organisations à créer des sauvegardes discrètes pour protéger et récupérer les données critiques en cas de modifications ou de suppressions accidentelles.

Cyber résilience:

Les instantanés avec verrou de conservation font partie d’une stratégie globale de cyber résilience Ils aident les organisations à protéger les données essentielles à l’activité lors des cyberattaques, en particulier des attaques par ransomware. Le verrou de rétention garantit que ces données ne peuvent pas être supprimées par l’attaquant, même s’il parvient à accéder au compte en utilisant les rôles ACCOUNTADMINou ORGADMIN.

Concepts clés

Cette section donne un aperçu des concepts clés pour les instantanés dans Snowflake.

Instantané

Un instantané représente une sauvegarde ponctuelle d’un objet.

  • L’objet peut être une seule table, un schéma ou une base de données entière.

  • Un instantané spécifique peut être identifié par un ID unique généré par Snowflake.

  • Un instantané ne peut pas être modifié. Il peut toutefois être supprimé, et la période d’expiration de l’instantané peut être modifiée (sauf si un verrou de rétention est appliqué).

Au cours des opérations quotidiennes, vous interagissez rarement avec des instantanés individuels. Au lieu de cela, vous gérez les ensembles d’instantanés qui les contiennent. Par exemple, vous obtenez une liste d’instantanés en exécutant la commande SHOW SNAPSHOTS IN SNAPSHOT SET. Vous créez un nouvel instantané en exécutant une commande ALTER SNAPSHOT SET.

Astuce

Snowflake utilise le terme instantanés dans d’autres contextes, tels que pour les volumes de stockage en blocs ou la quantité de données transférées lors d’une actualisation de la réplication. Lorsqu’il est nécessaire de distinguer la fonctionnalité d’instantané d’autres types d’instantanés, nous faisons référence aux instantanés WORM, ce qui signifie « Écriture unique, lecture multiple ». En particulier, les instructions CREATESNAPSHOT,ALTERSNAPSHOT,DROPSNAPSHOT,SHOWSNAPSHOTS et DESCRIBESNAPSHOTS s’appliquent toutes à d’autres types d’instantanés.

Ensemble d’instantanés

Un ensemble d’instantanés est un objet de niveau schéma qui contient un ensemble d’instantanés pour une base de données, un schéma ou une table spécifique. Snowflake dispose de commandesSQL pour CREATE,ALTER,DROP,SHOW et DESCRIBE des ensembles d’instantanés.

Vous pouvez avoir plusieurs ensembles d’instantanés pour le même objet. Le nombre d’ensembles d’instantanés pour le même objet est limité pendant le prévisualisation publique. Pour plus d’informations, voir Limitations des instantanés pendant la période de disponibilité en prévisualisation.

Le cycle de vie des instantanés d’un ensemble est déterminé par une politique des instantanés facultative que vous pouvez attacher à l’ensemble d’instantanés. Vous pouvez également ajouter ou supprimer manuellement des instantanés dans un ensemble d’instantanés. Votre capacité à supprimer des instantanés est affectée par d’autres facteurs, en particulier le verrouillage de conservation et la conteneur légale.

Politique des instantanés

Une politique des instantanés est un objet de niveau schéma qui contient les paramètres qui définissent le cycle de vie des instantanés dans un ensemble d’instantanés. Ces paramètres incluent la planification, l’expiration et le verrou de conservation.

  • La planification détermine quand les instantanés sont créés. La planification peut être définie comme un intervalle en minutes ou sous la forme d’une expression cron. Par exemple, si la planification est définie sur une heure, un instantané de l’objet est pris toutes les 60 minutes.

  • La période d’expiration est la durée pendant laquelle l’instantané est valide. Une fois qu’un instantané expire, Snowflake le supprime automatiquement, sauf si une conservation légale est appliquée à cet instantané particulier.

    Astuce

    Si l’ensemble d’instantanés ne dispose pas d’un verrou de conservation et si l’instantané spécifique n’est pas soumis à une conservation légale, vous pouvez supprimer manuellement l’instantané avant la fin de la période d’expiration. Vous pouvez supprimer manuellement des instantanés un à la fois, en commençant toujours par l’instantané le plus ancien qui n’a pas de conservation légale.

Chaque politique d’instantané doit disposer d’une ou des deux propriétés de planification et de période d’expiration. Par exemple, vous pouvez créer une politique avec une planification et une période d’expiration, et laisser Snowflake gérer la création et la suppression des instantanés dans tous les ensembles d’instantanés où cette politique est appliquée. Vous pouvez également créer une politique avec une planification et sans période d’expiration si vous souhaitez gérer vous-même la suppression des anciens instantanés. Ou, vous pouvez créer une politique avec une période d’expiration mais sans planification, puis gérer vous-même la création des instantanés. Vous ne pouvez pas créer une politique sans planification ni période d’expiration.

Si vous associez une politique d’instantanés à un ensemble d’instantanés, vous pouvez le faire lorsque vous créez l’ensemble d’instantanés, ou vous pouvez appliquer la politique ultérieurement. Ou, vous pouvez avoir un ensemble d’instantanés qui n’a pas de politique d’instantané associée. Dans ce cas, vous contrôlez manuellement quand prendre de nouveaux instantanés et faire expirer les anciens.

Vous pouvez appliquer une politique d’instantanés à plusieurs ensembles d’instantanés. Si vous modifiez une politique d’instantanés, Snowflake applique les modifications à tous les ensembles d’instantanés auxquels la politique est attachée.

Verrou de rétention

Un verrou de rétention protège un instantané contre la suppression pendant la période d’expiration définie. Vous pouvez utiliser un instantané avec un verrou de rétention pour les sauvegardes à des fins de conformité réglementaire et de cyber résilience. Les restrictions suivantes s’appliquent à un instantané défini avec un verrou de rétention :

  • Les instantanés ne peuvent être supprimés par aucun rôle, y compris le rôle ACCOUNTADMIN.

  • Vous ne pouvez pas réduire la période d’expiration de l’instantané, bien que vous puissiez augmenter la période d’expiration.

  • Vous ne pouvez pas supprimer un ensemble d’instantanés s’il contient des instantanés non expirés dans l’ensemble.

  • Vous ne pouvez pas supprimer un schéma qui contient un ensemble d’instantanés avec des instantanés non expirés.

  • Vous ne pouvez pas supprimer une base de données contenant un ensemble d’instantanés avec des instantanés non expirés.

  • Vous ne pouvez pas supprimer un compte qui contient une base de données avec un ensemble d’instantanés qui comporte des instantanés non expirés.

Important

L’application d’une politique d’instantané avec un verrou de rétention à un ensemble d’instantanés est irréversible. En raison des garanties strictes nécessaires à la conformité réglementaire, après avoir placé un verrou de conservation sur un ensemble d’instantanés, vous ne pouvez plus révoquer ce verrou. Le support Snowflake ne peut pas non plus révoquer un tel verrou de conservation. Réfléchissez bien avant de définir un verrou de conservation sur un ensemble d’instantanés avec une longue période d’expiration, afin d’éviter des frais de stockage inattendus pour les ensembles d’instantanés non supprimables, ainsi que pour les schémas et les bases de données qui les contiennent.

Si une organisation Snowflake est supprimée, l’organisation n’est plus un client Snowflake. Dans ce cas, Snowflake supprime tous les instantanés, y compris ceux avec des verrous de conservation. La suppression d’une organisation Snowflake nécessite l’intervention du support Snowflake. Il ne s’agit pas d’une opération qu’un administrateur peut effectuer par accident.

Présentation du cycle de vie des instantanés

Le schéma suivant montre comment les objets Snowflake, les instantanés, les ensembles d’instantanés et les politiques d’instantanés sont liés les uns aux autres. Le diagramme implique le type d’instantané le plus simple : un pour une seule table. Chaque opération de sauvegarde produit un nouvel instantané. Tous les instantanés pour cet objet particulier sont regroupés dans un ensemble d’instantanés. L’ajout et la suppression automatiques d’instantanés dans l’ensemble d’instantanés sont régis par la politique d’instantané. Pour récupérer les informations d’un instantané, vous utilisez une commande CREATE pour créer un nouvel objet à partir d’un instantané spécifique.

Concepts clés des instantanés

Fonctionnement des instantanés

Les instantanés sont des sauvegardes zero-copy d’un objet Snowflake, similaires aux clones. Les instantanés ne font pas de copies des données de la table lorsqu’ils sont créés. Le mécanisme d’instantané sauvegarde les données de table sans entraîner le coût ou le temps supplémentaire de la copie des données.

Snowflake stocke les données dans des fichiers immuables et maintient des pointeurs depuis les instantanés vers les fichiers de données qui sous-tendent la table. Au fur et à mesure que la table évolue et est modifiée, Snowflake garantit que chaque fichier de données est protégé contre la suppression à condition qu’il existe un instantané non expiré qui fait référence à ce fichier.

Restrictions pour les instantanés

Snowflake applique les restrictions suivantes pour les instantanés :

  • Vous ne pouvez pas modifier le verrou de conservation d’une politique d’instantané.

  • Lorsqu’une politique comporte un verrou de conservation, vous pouvez augmenter la période d’expiration, mais pas la réduire.

  • L’intervalle de planification minimum des instantanés planifiés est d’une heure (60 minutes).

Limitations des instantanés pendant la période de disponibilité en prévisualisation

Les limites suivantes peuvent changer lorsque la fonction des instantanés devient disponible de manière générale :

  • Lorsque vous configurez une planification régulière des instantanés, Snowflake impose une période de conservation maximale basée sur la fréquence des instantanés planifiés. Dans une stratégie d’instantané, la propriété EXPIRE_AFTER_DAYS est limitée en fonction de la propriété SCHEDULE associée, comme suit :

    • Les stratégies d’instantané avec une fréquence de 60 à 119 minutes ont une valeur EXPIRE_AFTER_DAYS maximale fixée à 90.

    • Les stratégies d’instantané avec une fréquence de 120 minutes à 23 heures et 59 minutes ont une valeur EXPIRE_AFTER_DAYS maximale fixée à 180.

    • Les stratégies d’instantané avec une fréquence de 24 heures ou plus ont une valeur EXPIRE_AFTER_DAYS maximale fixée à 366.

    • Les stratégies d’instantané sans planification ont une valeur EXPIRE_AFTER_DAYS maximale fixée à 3653.

  • Vous pouvez créer un maximum de deux ensembles d’instantanés de base de données pour une base de données spécifique. De même, vous pouvez créer un maximum de deux ensembles d’instantanés de schéma pour un schéma spécifique et deux ensembles d’instantanés de table pour une table spécifique. Un objet peut encore apparaître dans plus de deux ensembles d’instantanés. Par exemple, une table peut avoir un ou deux ensembles d’instantanés de table associés. La même table peut également être incluse dans un ou deux ensembles d’instantanés de schéma et un ou deux ensembles d’instantanés de base de données.

  • Une fois qu’une politique d’instantané est appliquée à un ensemble d’instantanés, vous ne pouvez pas supprimer la politique de cet ensemble d’instantanés.

Comparaison des instantanés avec d’autres fonctions de reprise après sinistre et de continuité des activités

Les instantanés offrent les avantages suivants qui se distinguent d’autres fonctionnalités de continuité d’activité et de reprise après sinistre, telles que la réplication et Time Travel :

  • Vous pouvez activer la conservation à long terme des instantanés. La conservation à long terme aide à la reprise, à la conformité réglementaire et à la cyber résilience contre des menaces telles que les ransomwares ou les attaques internes.

  • Le verrou de conservation garantit que les instantanés ne peuvent être supprimés par aucun utilisateur, y compris les administrateurs de comptes.

  • Vous pouvez planifier des instantanés sur un délai différent de celui que vous utilisez pour d’autres opérations de transfert de données, telles que les actualisations de réplication.

  • Vous pouvez prendre des instantanés et restaurer des objets de table individuels, ou des objets de conteneur tels que des schémas ou des bases de données entiers.

  • Vous pouvez empêcher la réduction de la durée de conservation des sauvegardes une fois la sauvegarde effectuée, en utilisant une politique d’instantané qui inclut un verrou de conservation. Cela diffère de la fonctionnalité Time Travel, où vous pouvez réduire l’intervalle de conservation à zéro.

  • Contrairement à Time Travel et Fail-safe, les instantanés préservent les données d’un plus grand nombre de types d’objets que les tables et les données de table.

  • La vitesse et l’efficacité de stockage des sauvegardes sont similaires au mécanisme de zéro copie utilisé pour le clonage.

  • La façon dont toutes les instantanés d’un même objet sont regroupés en ensembles d’instantanés rend la gestion plus simple que si vous utilisiez des clones pour mettre en œuvre votre propre mécanisme de sauvegarde. Par exemple, vous n’avez pas à gérer un grand nombre d’objets, à concevoir un schéma de nommage pour garder une trace des objets clonés, ou à mettre en œuvre un mécanisme de planification pour supprimer les anciens clones. De plus, contrairement aux objets clonés, les instantanés ne peuvent pas être modifiés après leur création.

  • Chaque instantané représente une table, un schéma ou une base de données unique au point spécifié dans le temps. Les instantanés n’incluent pas d’objets au niveau du compte, tels que des utilisateurs ou des rôles. Certains types de tables et d’autres objets au niveau de la base de données ne sont pas inclus dans les instantanés de schéma et de base de données. Pour plus d’informations, voir Expiration des instantanés.

  • Les objets liés aux instantanés sont stockés dans le même fournisseur de services Cloud (CSP) en tant que base de données, schéma ou table associé(e). Pour les scénarios de continuité d’activité et de reprise après sinistre, vous combinez généralement les instantanés avec la réplication de compte Snowflake. De cette façon, tous les ensembles d’instantanés et les politiques d’instantanés peuvent être répliqués dans une autre région ou un autre CSP et récupérés même s’il y a une panne qui affecte la région d’origine ou le CSP.

  • Les ensembles d’instantanés et les politiques d’instantanés ne peuvent pas être clonés. Si vous clonez un schéma ou une base de données contenant de tels objets, ils ne sont pas inclus dans le schéma ou la base de données cloné(e).

Objets instantanés

Vous pouvez créer des ensembles d’instantanés pour des tables, des schémas et des bases de données.

Références de tables à d’autres objets

Les objets tels que les vues ou les fonctions, peuvent faire référence à des objets extérieurs au schéma ou à la base de données dans l’instantané. Pour vous assurer que ces références continuent de fonctionner après une restauration à partir d’un instantané, utilisez l’une des stratégies suivantes :

  • Si les tables et les autres objets auxquels elles font référence sont tous dans le même schéma ou la même base de données, créez un ensemble d’instantanés pour l’ensemble du schéma ou de la base de données. De cette façon, Snowflake restaure tous les objets interconnectés en une seule fois lorsque vous effectuez une restauration à partir de l’instantané.

  • Si des objets d’un ensemble d’instantanés se réfèrent à des objets qui ne sont pas inclus dans cet ensemble, sachez que lors de la restauration d’un instantané, les références des objets restaurés pointent vers les objets d’origine de l’autre base de données ou schéma. Si vous avez supprimé ces autres objets ou modifié leurs propriétés après la prise de l’instantané, vous pourriez rencontrer des erreurs lors de l’accès aux objets restaurés.

  • Pour les objets de niveau compte, toutes les références des objets restaurés pointent toujours vers l’objet d’origine au niveau du compte. En effet, les objets au niveau du compte ne font partie d’aucun instantané. Par exemple, un instantané de schéma peut contenir un secret qui fait référence à une intégration de sécurité. L’intégration de sécurité est un objet de niveau compte et ne peut être incluse dans aucun instantané.

Types d’objets dans les instantanés de base de données et de schéma

Le tableau suivant répertorie les objets qui sont inclus dans un instantané de base de données ou de schéma :

Objet

Inclus dans l’instantané

Remarques

Tables permanentes

Oui

Les informations de Time Travel pour les tables ne sont pas stockées dans le cadre d’un instantané.

Tables transitoires

Oui

Ces tables continuent d’être des tables transitoires après leur restauration. Les schémas transitoires et les bases de données transitoires conservent également la propriété transitoire après leur restauration.

Tables temporaires

Non

Les tables temporaires sont limitées à la session et ne sont pas incluses dans les instantanés.

Tables dynamiques

Oui

Les tables dynamiques ont leur langage de définition des données (DDL) pour les instantanés. Vous pouvez exécuter les commandes CREATE SNAPSHOT SET FOR DYNAMIC TABLE et CREATE DYNAMIC TABLE FROM SNAPSHOT SET. Lorsque vous restaurez une table dynamique à partir d’un instantané, Snowflake initialise automatiquement la nouvelle table lors de sa première actualisation.

Tables externes

Non

Tables hybrides

Non

Tables Apache Iceberg™

Non

Contraintes de tables

Oui

Tables d’événements

Non

Séquences

Oui

Vues

Oui

Vues matérialisées

Non

Vues sécurisées

Oui

Formats de fichier

Oui

Zones de préparation internes

Non

Zones de préparation externes

Non

Zones de préparation temporaires

Non

Tables de répertoire

Non

Canaux

Non

Procédures stockées

Oui

Les procédures SQL, Javascript, Python, Java et Scala sont toutes prises en charge.

Fonctions définies par l’utilisateur (UDFs)

Oui

Les fonctions SQL, Javascript, Python, Java et Scala sont toutes prises en charge. Les UDFs scalaires et les fonctions de table définies par l’utilisateur (UDTFs) sont incluses dans l’instantané. Les UDFs Java dans les instantanés ont les mêmes exigences que dans Limites du clonage.

Flux

Non

Tâches

Oui

Les tâches sont incluses dans l’instantané. Les tâches restaurées à partir d’un instantané sont suspendues et doivent être reprises.

Fonctions de métrique des données (DMFs)

Non

Politiques

Oui

Les types de politiques suivants sont inclus dans un schéma ou un instantané de base de données :

  • Sécurité au niveau des colonnes (masquage)

  • Politiques d’accès aux lignes

  • Politiques de masquage basées sur les balises

Si une table incluse dans l’instantané est soumise à un autre type de politique, par exemple une politique d’agrégation ou une politique de projection, la création de l’instantané échoue.

Attributions

Oui

Si vous détruisez un rôle, les attributions de propriété associées sont transférées au rôle qui effectue la commande DROP ROLE. Les autorisations autres que la propriété sont supprimées dans ce cas. Par conséquent, les autorisations sur un objet restauré peuvent différer des autorisations qui existaient lorsque l’instantané a été créé.

Rôles de base de données

Non

Balisage d’objets

Oui

Alertes

Oui

Règles de réseau

Oui

Référentiel Github

Non

Modèles

Non

Moniteurs modèles

Non

Ensembles de données

Non

Carnets

Non

Contacts

Non

Services de recherche Cortex

Non

Projets dbt

Non

Référentiel d’images

Non

Éléments de liste

Non

Annonces d’organisations

Non

Canaux

Non

Politique (agrégation)

Non

Politique (authentification)

Non

Politique (fonctionnalité)

Non

Politique (jointure)

Non

Politique (packs)

Non

Politique (mot de passe)

Non

Politique (confidentialité)

Non

Politique (projection)

Non

Politique (session)

Non

Débit provisionné

Non

Vues sémantiques

Non

Services

Non

Streamlits

Non

Comment Snowflake associe les objets à leurs ensembles d’instantanés

Lorsque vous créez un ensemble d’instantanés pour une base de données, un schéma ou une table, Snowflake associe l’ensemble d’instantanés à l’ID interne de cette base de données, de ce schéma ou de cette table. Si vous supprimez l’objet d’origine, vous ne pouvez pas ajouter d’autres instantanés à cet ensemble d’instantanés. Ce comportement s’applique même si vous recréez un objet portant le même nom ou si vous le remplacez par un objet restauré à partir d’un instantané.

Si vous renommez l’objet d’origine, vous pouvez continuer à en faire d’autres sauvegardes en ajoutant des instantanés au même ensemble d’instantanés. Dans ce cas, la sortie de SHOW SNAPSHOT SETSOBJECT_NAME est modifiée afin de refléter la valeur de l’objet renommé.

Si vous souhaitez créer des sauvegardes d’une table mais que vous la supprimez et la recréez fréquemment, peut-être au moyen d’instructions CREATEORREPLACE, incluez-la dans un ensemble d’instantanés pour le schéma ou la base de données qui contient cette table. Ainsi, vous pouvez continuer à utiliser le même ensemble d’instantanés, quelles que soient les modifications apportées à la table.

Lorsque vous restaurez une table à partir d’un instantané, la table restaurée démarre avec un nom différent de celui d’origine. Supposons que vous souhaitiez remplacer complètement le contenu de la table d’origine par les données de l’instantané, et continuer à utiliser le même ensemble d’instantanés pour davantage de sauvegardes de la même table. Dans ce cas, utilisez une instruction TRUNCATE ou DELETE pour supprimer le contenu de la table d’origine, puis une instruction INSERT … SELECT pour copier les données depuis la table restaurée. Ne supprimez pas la table d’origine et ne renommez pas la table restaurée au nom de la table d’origine.

Instantanés et chiffrement

Les données des ensembles d’instantanés sont protégées par le même chiffrement de bout en bout que les autres objets Snowflake et les données de table. Pour plus d’informations sur le chiffrement Snowflake, voir Comprendre le chiffrement de bout en bout dans Snowflake.

La rotation des clés s’applique également aux données contenues dans les instantanés.

Instantanés et lignée de données

Snowflake ne conserve pas les métadonnées de traçabilité des données (data lineage) avec les instantanés de bases de données, de schémas et de tables. Après avoir restauré un objet à partir d’un instantané, vous ne pouvez pas utiliser Snowsight pour afficher les informations de lignée des données restaurées.

Coût des instantanés

Le tableau suivant décrit les frais des instantanés.

Composant des coûts

Description

Facturé lors de la prévisualisation

Calcul de l’instantané

Le service de calcul géré par Snowflake génère la création et l’expiration planifiées des instantanés.

Oui

Restaurer le calcul

Les entrepôts gérés par Snowflake sont utilisés pour restaurer des objets à partir d’instantanés.

Oui

Stockage des instantanés

Stockage d’objets dans le Cloud géré par Snowflake pour stocker les données des instantanés.

Facturé pour les octets conservés pour les instantanés, de la même manière que les octets conservés pour les clones.

Vous pouvez surveiller les coûts de stockage des instantanés dans la vue TABLE_STORAGE_METRICS à l’aide de la colonne RETAINED_FOR_CLONE_BYTES, ainsi que dans la vue SNAPSHOT_STORAGE_USAGE.

Privilèges de contrôle d’accès

Le tableau suivant répertorie les privilèges ainsi que le type d’objet sur lequel le privilège est accordé pour la gestion et l’utilisation des instantanés.

Privilège

Type d’objet

Description

CREATE SNAPSHOT POLICY

Schéma

Permet de créer une politique d’instantanés dans un schéma. Le rôle accordant ce privilège doit également disposer du privilègeUSAGE sur le schéma.

CREATE SNAPSHOT SET

Schéma

Permet de créer un ensemble d’instantanés dans un schéma. Le rôle accordant ce privilège doit également disposer du privilègeUSAGE sur le schéma. La création effective de l’ensemble d’instantanés nécessite également le privilège approprié sur l’objet qui est le sujet de l’ensemble d’instantanés : SELECT pour un instantané de tables, ou USAGE pour un instantané de schémas ou un instantané de bases de données.

APPLY

Politique des instantanés

Permet d’appliquer une politique d’instantané spécifique. Seul un utilisateur avec le rôleACCOUNTADMIN peut accorder ce privilège.

APPLY SNAPSHOT RETENTION LOCK

Compte

Permet de créer et d’appliquer des politiques d’instantanés avec verrouillage de rétention. Ce privilège est accordé au rôle ACCOUNTADMIN et peut être délégué.

Ce privilège est nécessaire pour permettre à un rôle de faire ce qui suit :

  • Créez une politique d’instantané avec un verrou de rétention.

  • Appliquez une politique d’instantané avec un verrou de rétention sur un ensemble d’instantanés.

  • Créez un instantané, manuellement par un utilisateur ou automatiquement selon une planification, dans un ensemble d’instantanés protégé par une politique avec un verrou de rétention.

APPLY LEGAL HOLD

Compte

Accorde la possibilité d’ajouter ou de supprimer une rétention légale d’un instantané. Par défaut, le rôle ACCOUNTADMIN dispose de ce privilège.

Accorder les privilèges nécessaires à la création de politiques et d’ensembles d’instantanés

Note

  • Le rôle utilisé pour accorder ces privilèges OWNERSHIPdoit disposer du privilège CREATE sur le schéma, ou bien du privilège SNAPSHOTSET ou CREATESNAPSHOTPOLICYWITHGRANTOPTION.

  • Vous pouvez accorder les privilèges suivants à un rôle de compte personnalisé ou à un rôle de base de données.

Pour activer le rôle myrole pour créer une politique d’instantané dans le schéma myschema, exécutez l’instruction suivante :

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

Pour activer le rôle myrole pour créer un ensemble d’instantanés dans le schéma myschema, exécutez l’instruction suivante :

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

Accorder le privilège APPLY sur une politique d’instantané vers un rôle

Note

  • Seul un utilisateur avec le rôleACCOUNTADMIN peut accorder ce privilège.

  • Vous pouvez accorder ce privilège à un rôle d’utilisateur de compte personnalisé ou à un rôle de base de données.

Pour permettre au rôle myrole d’appliquer la stratégie d’instantané hourly_snapshot_policy à un ensemble d’instantanés, exécutez l’instruction suivante :

GRANT APPLY ON SNAPSHOT POLICY hourly_snapshot_policy TO ROLE myrole;
Copy

Accorder le privilège APPLY SNAPSHOT RETENTIONLOCK à un rôle

Vous pouvez accorder à un rôle le privilège pour appliquer des politiques d’instantanés avec un verrou de rétention aux ensembles d’instantanés.

Seul un utilisateur avec le rôleACCOUNTADMIN peut accorder ce privilège.

Important

L’application d’une politique d’instantané avec un verrou de rétention à un ensemble d’instantanés est irréversible. En raison des solides garanties nécessaires pour la conformité réglementaire, une fois que vous avez placé un verrou de rétention sur un ensemble d’instantanés, vous ne pouvez pas révoquer le verrou. Le support Snowflake ne peut pas non plus révoquer un tel verrou de conservation. Les instantanés créés avec un verrou de rétention ne peuvent pas être supprimés avant la fin de la période d’expiration.

Si une organisation Snowflake est supprimée, l’organisation n’est plus un client Snowflake. Dans ce cas, Snowflake supprime tous les instantanés, y compris ceux avec des verrous de conservation.

Pour permettre au rôle retention_lock_admin_role d’appliquer une stratégie d’instantané avec verrou de rétention à un ensemble d’instantanés, exécutez l’instruction suivante :

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

Créer et configurer des instantanés

Cette section fournit des exemples de flux de travail pour la création et la restauration d’instantanés.

Créer des instantanés planifiés

Créer un ensemble d’instantanés qui crée automatiquement des instantanés selon une planification.

  1. Créez une politique d’instantané à l’aide de la commande CREATE SNAPSHOT POLICY. Par exemple, la politique suivante crée un instantané toutes les heures, à partir du moment où l’ensemble d’instantanés est créé. Chaque instantané expire après 90 jours.

    CREATE SNAPSHOT POLICY hourly_snapshot_policy
      SCHEDULE = '60 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'Hourly backups expire after 90 days';
    
    Copy
  2. Créez un ensemble d’instantanés pour la table t1 avec la politique des instantanés hourly_snapshot_policy :

    CREATE SNAPSHOT SET t1_snapshots
      FOR TABLE t1
      WITH SNAPSHOT POLICY hourly_snapshot_policy;
    
    Copy
  3. Créez un ensemble d’instantanés pour le schéma s1 avec la politique des instantanés hourly_snapshot_policy :

    CREATE SNAPSHOT SET s1_snapshots
      FOR SCHEMA s1
      WITH SNAPSHOT POLICY hourly_snapshot_policy;
    
    Copy
  4. Créez un ensemble d’instantanés pour la base de données d1 avec la politique des instantanés hourly_snapshot_policy :

    CREATE SNAPSHOT SET d1_snapshots
      FOR DATABASE d1
      WITH SNAPSHOT POLICY hourly_snapshot_policy;
    
    Copy

Créer des instantanés planifiés avec un verrou de rétention

Créer un ensemble d’instantanés qui génère automatiquement des instantanés avec verrouillage de rétention selon une planification. Le verrou de rétention empêche toute personne, même les utilisateurs privilégiés, de supprimer ou de modifier des instantanés dans tout ensemble d’instantanés auquel la politique est associée.

Seul un rôle disposant du privilège APPLYSNAPSHOTRETENTIONLOCK sur le compte peut créer une stratégie d’instantané avec verrou de rétention.

Important

L’application d’une politique d’instantané avec un verrou de rétention à un ensemble d’instantanés est irréversible. En raison des solides garanties nécessaires pour la conformité réglementaire, une fois que vous avez placé un verrou de rétention sur un ensemble d’instantanés, vous ne pouvez pas révoquer le verrou. Le support Snowflake ne peut pas non plus révoquer un tel verrou de conservation. Les instantanés créés avec un verrou de rétention ne peuvent pas être supprimés avant la fin de la période d’expiration.

Si une organisation Snowflake est supprimée, l’organisation n’est plus un client Snowflake. Dans ce cas, Snowflake supprime tous les instantanés, y compris ceux avec des verrous de conservation.

  1. Créer une politique avec un verrou de rétention qui crée un instantané quotidien avec une période d’expiration de 90 jours :

    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';
    
    Copy
  2. Créez un ensemble d’instantanés pour la table t2 avec la politique des instantanés daily_snapshot_policy_with_lock :

    CREATE SNAPSHOT SET t2_snapshots
      FOR TABLE t2
      WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
    
    Copy
  3. Créez un ensemble d’instantanés pour le schéma s2 avec la politique des instantanés daily_snapshot_policy_with_lock :

    CREATE SNAPSHOT SET s2_snapshots
      FOR SCHEMA s2
      WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
    
    Copy
  4. Créez un ensemble d’instantanés pour la base de données d2 avec la politique des instantanés daily_snapshot_policy_with_lock :

    CREATE SNAPSHOT SET d2_snapshots
      FOR DATABASE d2
      WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
    
    Copy

Créer manuellement des instantanés

Vous pouvez ajouter manuellement un instantané à un ensemble d’instantanés à tout moment. Cela permet de créer un instantané de la base de données, du schéma ou de la table associé à l’ensemble d’instantanés. Vous pouvez créer des instantanés manuellement, que l’ensemble d’instantanés comporte ou non également des instantanés planifiés par une politique d’instantané. Si une politique d’instantané est associée à l’ensemble de l’instantané et que la politique définit une période d’expiration, cette période d’expiration s’applique également à l’instantané manuel.

L’exemple suivant crée un ensemble d’instantanés de table t1_snapshots puis y ajoute le premier instantané :

CREATE SNAPSHOT SET t1_snapshots FOR TABLE t1;
ALTER SNAPSHOT SET t1_snapshots ADD SNAPSHOT;
Copy

L’exemple suivant crée une stratégie d’instantané avec des sauvegardes horaires, un ensemble d’instantanés de table t2_snapshots qui utilise cette stratégie, puis ajoute un instantané manuel à l’ensemble d’instantanés :

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;
Copy

Vous pouvez exécuter des commandes similaires pour ajouter un instantané à un schéma ou à un ensemble d’instantanés de base de données. Remplacer le nom du schéma ou de l’instantané de base de données défini dans la commande ALTER SNAPSHOT SET.

Suspendre une politique d’instantané sur un ensemble d’instantanés

Lorsque vous suspendez une politique des instantanés sur un ensemble d’instantanés, vous empêchez l’utilisation de la politique des instantanés pour créer de nouveaux instantanés planifiés dans cet ensemble d’instantanés. Vous suspendez également l’expiration des instantanés existants dans cet ensemble d’instantanés qui utilisent la politique des instantanés. Les autres ensembles d’instantanés qui utilisent la même politique ne sont pas concernés.

L’exemple suivant suspend une politique d’instantanés sur l’ensemble d’instantanés t2_snapshots :

ALTER SNAPSHOT SET t2_snapshots SUSPEND SNAPSHOT POLICY;
Copy

Pour plus d’informations sur la commande ALTER SNAPSHOT SET, consultez ALTER SNAPSHOT SET.

Reprendre une politique d’instantané sur un ensemble d’instantanés

Vous pouvez reprendre des politiques d’instantanés suspendues. Cela permet de reprendre la création et l’expiration des instantanés conformément à la politique des instantanés. Si des instantanés ont atteint leur date d’expiration alors que la politique était suspendue, Snowflake supprime ces instantanés dès que la politique est reprise.

L’exemple suivant reprend une politique des instantanés sur l’ensemble d’instantanés t1_snapshot :

ALTER SNAPSHOT SET t1_snapshots
  RESUME SNAPSHOT POLICY;
Copy

Pour plus d’informations sur la commande ALTER SNAPSHOT SET, consultez ALTER SNAPSHOT SET.

Restaurer un instantané

Vous pouvez restaurer un objet à partir d’un ensemble d’instantanés en utilisant l’ID de l’instantané spécifique. Par exemple, pour restaurer la table t1 à partir de l’ensemble d’instantanés t1_snapshots dans le schéma actuel, exécutez les instructions suivantes :

  1. Trouvez l’ID de l’instantané de la table à restaurer dans la colonne snapshot_id :

    SHOW SNAPSHOTS IN SNAPSHOT SET t1_snapshots ->> SELECT "created_on", "snapshot_id", "expire_on" FROM $1;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | 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 |
    +-------------------------------+--------------------------------------+-----------+-------------------+
    
  2. Trouvez l’IDde l’instantané du schéma à restaurer dans la colonne snapshot_id :

    SHOW SNAPSHOTS IN SNAPSHOT SET s1_snapshots;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | 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 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  3. Trouvez l’ID de l’instantané de la base de données à restaurer dans la colonne snapshot_id :

    SHOW SNAPSHOTS IN SNAPSHOT SET d1_snapshots;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | 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 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. Restaurez l’instantané pour la table t1 pris le 2024-08-19 18:12:33:

    CREATE TABLE restored_t1 FROM SNAPSHOT SET t1_snapshots IDENTIFIER 'b5624ef0-1f35-452f-b132-09d8f0592e52';
    
    Copy
  5. Restaurez l’instantané pour le schéma s1 pris le 2024-08-19 18:12:33:

    CREATE SCHEMA restored_s1 FROM SNAPSHOT SET s1_snapshots IDENTIFIER '8dbcf919-3393-4590-928f-5481d7f2502f';
    
    Copy
  6. Restaurez l’instantané pour la base de données d1 pris le 2024-08-19 18:12:33:

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

Supprimer un instantané d’un ensemble d’instantanés

Pour tout ensemble d’instantanés, vous pouvez uniquement supprimer l’instantané le plus ancien qui n’a pas de conservation légale. Vous le faites en spécifiant l’ID de l’instantané. Vous pouvez trouver les instantanés qui n’ont pas de rétention légale en examinant la propriété is_under_legal_hold. Vous pouvez trouver l’instantané le plus ancien en examinant la propriété created_on.

Note

Vous ne pouvez pas supprimer un instantané d’un ensemble d’instantanés si une politique d’instantané avec un verrou de rétention est attachée à cet ensemble d’instantanés, ou si cet instantané particulier est soumis à une conservation légale.

L’instantané que vous supprimez dans l’ensemble d’instantanés doit être l’instantané le plus ancien de l’ensemble.

  1. Trouvez l’ID de l’instantané de la table à supprimer dans la colonne snapshot_id de la sortie suivante. Le tri par ordre croissant de la colonne created_on place l’instantané le plus ancien en premier. Vous pourriez ajouter LIMIT 1 à la commande SELECTpour ne renvoyer que la ligne contenant les détails de l’instantané le plus ancien.

    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";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | 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 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  2. Supprimez l’instantané t1_snapshots créé le 19-08-2024 à 17:12:28 en utilisant le snapshot_id :

    ALTER SNAPSHOT SET t1_snapshots DELETE SNAPSHOT IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
    
    Copy
  3. Trouvez l’IDde l’instantané du schéma à supprimer dans la colonne snapshot_id de la sortie suivante :

    SHOW SNAPSHOTS IN SNAPSHOT SET s1_snapshots ->>
      SELECT "created_on", "snapshot_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | 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 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. Supprimez l’instantané s1_snapshots créé le 19-08-2024 à 17:12:28 en utilisant le snapshot_id :

    ALTER SNAPSHOT SET s1_snapshots DELETE SNAPSHOT IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
    
    Copy
  5. Trouvez le IDde l’instantané de la base de données à supprimer dans la colonne ``snapshot_id``de la sortie suivante :

    SHOW SNAPSHOTS IN SNAPSHOT SET d1_snapshots ->>
      SELECT "created_on", "snapshot_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | 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 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  6. Supprimez l’instantané d1_snapshots créé le 19-08-2024 à 17:12:28 en utilisant le snapshot_id :

    ALTER SNAPSHOT SET d1_snapshots DELETE SNAPSHOT IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
    
    Copy
  7. Essayez de supprimer un instantané d1_snapshots plus récent, créé le 19-08-2024 à 21:12:55. Remarquez comment Snowflake vous empêche de supprimer un instantané autre que le plus ancien de l’ensemble des instantanés.

    ALTER SNAPSHOT SET d1_snapshots DELETE SNAPSHOT IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
    
    Copy
    Snapshot '28e12b8a-aab8-40a8-ae39-9a5a5f654d66' cannot be deleted as it is not the oldest active snapshot in the snapshot set D1_SNAPSHOTS.
    

Supprimer un ensemble d’instantanés

Vous pouvez supprimer un ensemble d’instantanés à l’aide de la commande DROP SNAPSHOT SET.

Note

Vous ne pouvez pas supprimer un ensemble d’instantanés qui a un verrou de rétention et qui contient des instantanés non expirés. Vous ne pouvez pas non plus supprimer un ensemble d’instantanés si l’un de ses instantanés dispose d’une conservation légale.

Supprimez l’ensemble des instantanés t1_snapshots :

DROP SNAPSHOT SET t1_snapshots;
Copy

Supprimez l’ensemble des instantanés s1_snapshots :

DROP SNAPSHOT SET s1_snapshots;
Copy

Supprimez l’ensemble des instantanés d1_snapshots :

DROP SNAPSHOT SET d1_snapshots;
Copy

Trouvez tous les ensembles d’instantanés qui contiennent des sauvegardes d’une table spécifique

L’exemple suivant montre comment trouver tous les ensembles d’instantanés qui contiennent une table spécifique dans un schéma et une base de données spécifiques. La commande SHOW TABLES utilise un opérateur de canal pour récupérer les noms de la base de données, du schéma et de la table et les stocker dans des variables. La sortie de SHOWSNAPSHOTSETS est filtrée pour afficher les ensembles d’instantanés qui sauvegardent la base de données contenant la table, ou le schéma contenant la table, ou qui contiennent cette table seule.

La sortie filtrée de SHOWSNAPSHOTSETSmontre qu’il existe deux ensembles d’instantanés de base de données pour la base de données MY_BIG_IMPORTANT_DATABASE, un ensemble d’instantanés de schéma pour le schéma MY_BIG_IMPORTANT_DATABASE.PUBLIC, et un ensemble d’instantanés de table pour la table MY_BIG_IMPORTANT_DATABASEPUBLICMY_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);
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  |
+-------------+------------------+---------------------------+-------------+---------------------------+

Créer un instantané pour une table avec des dépendances

Les exemples suivants montrent comment vous pouvez créer un instantané de table pour une table qui fait référence à une séquence et à une clé étrangère dans un schéma différent. Pour la préparation, nous créons le schéma other_schema contenant une séquence et une table. Nous créons ensuite la table principale dans le schéma public, en faisant référence à la séquence et à l’autre table.

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

La sortie de GET_DDL () affiche les références qui pointent vers l’autre schéma :

+-------------------------------------------+
| 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)
| );                                        |
+-------------------------------------------+

Ensuite, nous créons l’ensemble d’instantanés pour la table et y ajoutons un instantané :

CREATE SNAPSHOT SET dependency_experiments FOR TABLE dependent_table;
ALTER SNAPSHOT SET dependency_experiments ADD SNAPSHOT;
SHOW SNAPSHOTS IN SNAPSHOT SET dependency_experiments;
Copy

La sortie de SHOWSNAPSHOTS contient la valeur snapshot_id à utiliser pour l’opération de restauration :

+-------------------------------+--------------------------------------+------------------------+---------------------------+--------------+-----------+
| 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      |
+-------------------------------+--------------------------------------+------------------------+---------------------------+--------------+-----------+

Nous restaurons cette table sous un nouveau nom et confirmons que la table restaurée fait référence aux objets de l’autre schéma :

CREATE TABLE restored_dependent_table FROM SNAPSHOT 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)                                 |
| );                                                 |
+----------------------------------------------------+

Pour illustrer ce qui se passe si l’objet référencé n’existe plus, nous supprimons la séquence, puis nous restaurons à nouveau la table à partir du même instantané :

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;
Copy

L’interrogation de la table fonctionne toujours :

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

Cependant, des opérations telles que GET_DDL(), DESCRIBE et INSERT échouent toutes car elles dépendent d’une séquence qui n’existe plus :

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.

Créer un instantané pour une table dynamique

Une table dynamique implique toujours une référence à une autre table. C’est pourquoi vous pouvez, si vous le souhaitez, utiliser des instantanés de schéma ou des instantanés de base de données pour les tables dynamiques, afin que la table d’origine et la table dynamique puissent être incluses dans le même instantané.

Si vous créez un instantané de table pour une table dynamique, vous incluez le mot-clé DYNAMIC dans la commande CREATESNAPSHOTSET, ainsi que dans CREATETABLE lorsque vous effectuez une restauration à partir d’un instantané. L’exemple suivant configure la table dynamique, un instantané de table défini pour cette table et crée le premier instantané :

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;
Copy

L’exemple suivant montre comment déterminer les IDs d’instantané pour des instantanés créés à différents moments. Dans ce cas, l’instantané le plus récent est la première ligne du jeu de résultats. Vous utilisez ensuite l’ID de l’instantané dans la commande CREATE DYNAMIC TABLE.

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>';
Copy

Astuce

Lorsque vous restaurez une table dynamique à partir d’un instantané, Snowflake initialise automatiquement la nouvelle table lors de sa première actualisation.

Surveiller les instantanés et les opérations d’instantané

Vous pouvez déterminer quels objets liés aux instantanés existent, leurs propriétés et la quantité de stockage qu’ils utilisent en interrogeant les vues suivantes.

Information Schema

Utilisation du compte :

Rubriques de référence SQL

Politique des instantanés

Ensemble d’instantanés

Instantanés

Vous n’exécutez pas réellement la commande CREATESNAPSHOT. Pour créer un nouvel instantané, vous exécutez ALTER SNAPSHOT SET … ADD SNAPSHOT. Ou lorsque vous associez l’ensemble d’instantanés à une politique d’instantanés qui a une planification, Snowflake crée automatiquement des instantanés dans l’ensemble d’instantanés en fonction de la planification spécifiée. Pour supprimer un instantané ancien, vous exécutez ALTER SNAPSHOT SET … DELETE SNAPSHOT. Ces opérations nécessitent pour spécifier l’identificateur d’un instantané spécifique. Vous pouvez trouver les identificateurs des instantanés, ainsi que d’autres informations telles que la date de création de chaque instantané, à l’aide de la commande suivante.

Restauration d’objets à partir d’instantanés

Vous utilisez la syntaxe CREATE object_kind FROM SNAPSHOT SET pour restaurer chaque type d’objet à partir du type approprié d’instantané défini.

Les autres instantanés du jeu d’instantanés utilisent l’objet d’origine, et non l’objet restauré. Cela est vrai même si vous renommez l’objet restauré à l’aide du même nom que l’objet d’origine. Si vous souhaitez continuer à utiliser le même ensemble d’instantanés après une restauration, vous restaurez l’objet sous un nouveau nom, puis transférez à nouveau les données vers l’objet d’origine.

Vues

Les vues système suivantes contiennent des métadonnées relatives aux instantanés, aux ensembles d’instantanés et aux stratégies d’instantanés.

Vues du schéma d’information

Ces vues du schéma INFORMATION_SCHEMA contiennent des informations sur les objets liés aux instantanés qui existent actuellement :

Vues d’utilisation du compte

Ces vues du schéma ACCOUNT_USAGE contiennent des informations sur les objets liés aux instantanés qui existent ou qui ont été supprimés, sur les opérations effectuées sur les instantanés, ainsi que sur l’espace de stockage qu’ils utilisent :