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.
Conservation légale¶
La fonction de conservation légale des instantanés Snowflake empêche les instantanés d’être écrasés ou supprimés. Ainsi, vous pouvez préserver les bases de données, schémas ou tables Snowflake en fonction de vos exigences légales.
Snowflake vous permet d’établir une conservation légale sur des instantanés spécifiques. Lorsqu’un instantané Snowflake est légalement suspendu, les conditions suivantes s’appliquent :
Personne ne peut modifier l’instantané.
Personne ne peut supprimer l’instantané. C’est vrai même si l’instantané a dépassé sa période EXPIRE_AFTER_DAYS.
L’accès à l’instantané est enregistré et auditable.
La conservation légale peut être supprimée par un utilisateur privilégié, contrairement à un verrou de conservation.
Important
Si vous répliquez un ensemble d’instantanés, assurez-vous d’effectuer une actualisation immédiatement après avoir placé une conservation légale sur un instantané dans cet ensemble d’instantanés. Si vous effectuez un basculement avant de répliquer l’ensemble d’instantanés qui contient la conservation légale, l’ensemble d’instantanés d’origine peut être remplacé lorsque vous revenez au compte principal d’origine, ce qui peut entraîner l’effacement de la conservation légale.
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.

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 :
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 :
|
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;
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;
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;
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;
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.
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';
Créez un ensemble d’instantanés pour la table
t1
avec la politique des instantanéshourly_snapshot_policy
:CREATE SNAPSHOT SET t1_snapshots FOR TABLE t1 WITH SNAPSHOT POLICY hourly_snapshot_policy;
Créez un ensemble d’instantanés pour le schéma
s1
avec la politique des instantanéshourly_snapshot_policy
:CREATE SNAPSHOT SET s1_snapshots FOR SCHEMA s1 WITH SNAPSHOT POLICY hourly_snapshot_policy;
Créez un ensemble d’instantanés pour la base de données
d1
avec la politique des instantanéshourly_snapshot_policy
:CREATE SNAPSHOT SET d1_snapshots FOR DATABASE d1 WITH SNAPSHOT POLICY hourly_snapshot_policy;
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.
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';
Créez un ensemble d’instantanés pour la table
t2
avec la politique des instantanésdaily_snapshot_policy_with_lock
:CREATE SNAPSHOT SET t2_snapshots FOR TABLE t2 WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
Créez un ensemble d’instantanés pour le schéma
s2
avec la politique des instantanésdaily_snapshot_policy_with_lock
:CREATE SNAPSHOT SET s2_snapshots FOR SCHEMA s2 WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
Créez un ensemble d’instantanés pour la base de données
d2
avec la politique des instantanésdaily_snapshot_policy_with_lock
:CREATE SNAPSHOT SET d2_snapshots FOR DATABASE d2 WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
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;
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;
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;
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;
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 :
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;
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-----------+-------------------+
Trouvez l’IDde l’instantané du schéma à restaurer dans la colonne
snapshot_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 | +-------------------------------+--------------------------------------+-------------------------------+
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;
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
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';
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';
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';
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.
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 colonnecreated_on
place l’instantané le plus ancien en premier. Vous pourriez ajouterLIMIT 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";
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
Supprimez l’instantané
t1_snapshots
créé le 19-08-2024 à 17:12:28 en utilisant lesnapshot_id
:ALTER SNAPSHOT SET t1_snapshots DELETE SNAPSHOT IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
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";
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
Supprimez l’instantané
s1_snapshots
créé le 19-08-2024 à 17:12:28 en utilisant lesnapshot_id
:ALTER SNAPSHOT SET s1_snapshots DELETE SNAPSHOT IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
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";
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
Supprimez l’instantané
d1_snapshots
créé le 19-08-2024 à 17:12:28 en utilisant lesnapshot_id
:ALTER SNAPSHOT SET d1_snapshots DELETE SNAPSHOT IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
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';
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;
Supprimez l’ensemble des instantanés s1_snapshots
:
DROP SNAPSHOT SET s1_snapshots;
Supprimez l’ensemble des instantanés d1_snapshots
:
DROP SNAPSHOT SET d1_snapshots;
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);
+-------------+------------------+---------------------------+-------------+---------------------------+
| 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');
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;
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');
+----------------------------------------------------+
| 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;
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');
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.
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;
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>';
Astuce
Lorsque vous restaurez une table dynamique à partir d’un instantané, Snowflake initialise automatiquement la nouvelle table lors de sa première actualisation.
Ajouter et supprimer des saisies légales¶
Avant de travailler avec des saisies légales pour les instantanés Snowflake, découvrez leur objectif et leurs exigences. Pour plus d’informations, voir Conservation légale.
Supposons que l’équipe juridique ou de conformité de votre organisation envoie une demande de conservation dans le cadre d’un litige, en précisant quels types de données doivent être conservés. Dans ce cas, vous pouvez suivre un processus comme suit :
Vous travaillez avec l’équipe légale pour identifier où les données pertinentes sont stockées et quels ensembles d’instantanés contiennent les objets associés.
Vous appliquez une rétention légale à un instantané de la période concernée au sein d’un ensemble d’instantanés. Cela désactivera toute expiration automatique pour cet instantané. Vous pouvez placer une rétention légale sur un instantané que Snowflake a créé automatiquement en fonction d’une planification, ou que vous avez créé manuellement. La rétention légale s’applique, que l’ensemble d’instantanés dispose ou non d’une politique d’instantané associée, d’une période d’expiration ou d’un verrou de conservation.
Vous effectuez des opérations d’actualisation pour tous les comptes secondaires dans lesquels la base de données contenant l’ensemble d’instantanés est répliquée. De cette manière, la conservation légale et l’instantané associé sont préservés à travers toutes les opérations de basculement et de restauration.
Vous utilisez les contrôles d’accès et les journaux Snowflake pour auditer l’accès aux données placées sous la rétention légale.
Une fois le dossier légal conclu et l’autorisation donnée par l’équipe juridique de lever la rétention légale, un utilisateur disposant du privilège APPLYLEGALHOLD supprime cette rétention. L’automatisation normale de l’expiration reprend alors.
Cet exemple montre la séquence de commandes SQLque vous pourriez utiliser au cours du cycle de vie d’une rétention légale appliquée à un instantané au sein d’un ensemble d’instantanés particulier. Vous trouvez l’identificateur de l’instantané concerné en utilisant la commande SHOWSNAPSHOTSINSNAPSHOTSET et en vérifiant la colonne `` »is_under_legal_hold »``pour voir si une rétention légale est déjà en place. Ensuite, vous ajoutez ou supprimez la conservation légale de l’instantané concerné.
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;
Astuce
Vous pouvez également vérifier l’existence de rétentions légales en interrogeant la colonne "is_under_legal_hold"
dans les vues INFORMATION_SCHEMA.SNAPSHOTS ou ACCOUNT_USAGE;SNAPSHOTS.
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 :