Sauvegardes pour la reprise après sinistre et le stockage immuable

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

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

Cas d’utilisation pour les sauvegardes Snowflake

Les cas d’utilisation suivants sont typiques des applications des sauvegardes :

Conformité réglementaire:

Les sauvegardes 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.

Note

Snowflake a engagé Cohasset Associa pour effectuer une évaluation indépendante de notre fonctionnalité de sauvegardes afin de vérifier la conformité aux exigences clés de la tenue des enregistrements réglementaires, y compris la SEC 17a-4(f), SEC 18a-6(e), la règle FINRA 4511(c), et la règle CFTC 1.31(c)-(d). Cette évaluation Cohasset fournit une vérification indépendante et tierce du fait que les contrôles du stockage immuable de Snowflake prennent en charge la création, la protection et la conservation des données. Elle garantir également aux clients que Snowflake répond aux normes critiques de l’industrie pour la conservation des données réglementée en fonction des réglementations évaluées.

Pour le rapport de conformité complet qui s’applique aux sauvegardes Snowflake avec verrou de rétention, voir le Centre de conformité Snowflake.

Récupération:

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

Cyber résilience:

Les sauvegardes avec verrou de rétention 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 sauvegardes dans Snowflake.

Sauvegarde

Une sauvegarde représente un instantané ponctuel d’un objet.

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

  • Une sauvegarde spécifique peut être identifiée par un ID unique généré par Snowflake.

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

Au cours des opérations quotidiennes, vous interagissez rarement avec des sauvegardes individuelles. Au lieu de cela, vous gérez les ensembles de sauvegardes qui les contiennent. Par exemple, vous obtenez une liste de sauvegardes en exécutant la commande SHOW BACKUPS IN BACKUP SET. Vous créez une nouvelle sauvegarde en exécutant une commande ALTER BACKUP SET.

Ensemble de sauvegardes

Un ensemble de sauvegardes est un objet de niveau schéma qui contient un ensemble de sauvegardes pour une base de données, un schéma ou une table spécifique. Snowflake dispose de commandes SQL pour les ensembles de sauvegardes CREATE, ALTER, DROP, SHOW, et DESCRIBE.

Vous pouvez avoir plusieurs ensembles de sauvegardes pour le même objet.

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

Politique de sauvegarde

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

  • La planification détermine quand les sauvegardes sont créées. 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, une sauvegarde de l’objet est effectuée toutes les 60 minutes.

  • La période d’expiration est la durée pendant laquelle la sauvegarde est valide. Une fois qu’une sauvegarde expire, Snowflake la supprime automatiquement, sauf si une conservation légale est appliquée à cette sauvegarde particulière.

    Astuce

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

Chaque politique de sauvegardes 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 sauvegardes dans tous les ensembles de sauvegardes 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 anciennes sauvegardes. 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 sauvegardes. Vous ne pouvez pas créer une politique sans planification ni période d’expiration.

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

Vous pouvez appliquer une politique de sauvegarde à plusieurs ensembles de sauvegardes. Si vous modifiez une politique de sauvegardes, Snowflake applique les modifications à tous les ensembles de sauvegardes auxquels la politique est attachée.

Verrou de rétention

Un verrou de rétention protège une sauvegarde contre la suppression pendant la période d’expiration définie. Vous pouvez utiliser une sauvegarde 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 à une sauvegarde définie avec un verrou de rétention :

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

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

  • Vous ne pouvez pas supprimer un ensemble de sauvegardes s’il y a des sauvegardes n’ayant pas expiré dans l’ensemble.

  • Vous ne pouvez pas supprimer un schéma contenant un ensemble de sauvegardes avec des sauvegardes n’ayant pas expiré.

  • Vous ne pouvez pas supprimer une base de données contenant un ensemble de sauvegardes avec des sauvegardes n’ayant pas expiré.

  • Vous ne pouvez pas supprimer un compte qui contient une base de données avec un ensemble de sauvegardes qui comporte des sauvegardes n’ayant pas expiré.

Important

L’application d’une politique de sauvegarde avec un verrou de rétention à un ensemble de sauvegardes est irréversible. En raison des garanties strictes nécessaires à la conformité réglementaire, après avoir placé un verrou de rétention sur un ensemble de sauvegardes, 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 rétention sur un ensemble de sauvegardes avec une longue période d’expiration, afin d’éviter des frais de stockage inattendus pour les ensembles de sauvegardes 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 toutes les sauvegardes, y compris celles avec des verrous de rétention. 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.

Vue d’ensemble du cycle de vie de la sauvegarde

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

Concepts clés des sauvegardes

Fonctionnement des sauvegardes

Les sauvegardes sont des doublons zero-copy d’un objet Snowflake, similaires aux clones. Les sauvegardes ne font pas de copies des données de la table lorsqu’elles sont créées. Le mécanisme de sauvegarde 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 sauvegardes 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 une sauvegarde non expirée qui fait référence à ce fichier.

Restrictions pour les sauvegardes

Snowflake applique les restrictions suivantes pour les sauvegardes :

  • Vous ne pouvez pas modifier le verrou de rétention d’une politique de sauvegarde.

  • 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 sauvegardes planifiées est d’une heure (60 minutes).

Limitations des sauvegardes

Vous pouvez créer un maximum de deux ensembles de sauvegardes 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 de sauvegardes de schéma pour un schéma spécifique et deux ensembles de sauvegardes de table pour une table spécifique. Un objet peut encore apparaître dans plus de deux ensembles de sauvegardes. Par exemple, une table peut avoir un ou deux ensembles de sauvegardes de table associés. La même table peut également être incluse dans un ou deux ensembles de sauvegardes de schéma et un ou deux ensembles de sauvegardes de base de données.

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

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

  • Vous pouvez activer la rétention à long terme des sauvegardes. 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 rétention garantit que les sauvegardes ne peuvent être supprimées par aucun utilisateur, y compris les administrateurs de comptes.

  • Vous pouvez planifier des sauvegardes 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 effectuer des sauvegardes 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 de sauvegarde qui inclut un verrou de rétention. 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 sauvegardes 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 sauvegardes d’un même objet sont regroupées en ensembles de sauvegardes 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 sauvegardes ne peuvent pas être modifiées après leur création.

  • Chaque sauvegarde représente une seule table, un seul schéma ou une seule base de données à partir du point spécifié dans le temps. Les sauvegardes 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 sauvegardes de schéma et de base de données. Pour plus d’informations, voir Objets de sauvegarde.

  • Les objets liés aux sauvegardes 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 sauvegardes avec la réplication de compte Snowflake. De cette façon, tous les ensembles de sauvegardes et les politiques de sauvegardes 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 de sauvegardes et les politiques de sauvegarde 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 de sauvegarde

Vous pouvez créer des ensembles de sauvegardes 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 la sauvegarde. Pour vous assurer que ces références continuent de fonctionner après une restauration à partir d’une sauvegarde, 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 de sauvegardes 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 la sauvegarde.

  • Si des objets d’un ensemble de sauvegardes se réfèrent à des objets qui ne sont pas inclus dans cet ensemble, sachez que lors de la restauration d’une sauvegarde, 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 l’exécution de la sauvegarde, 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’aucune sauvegarde. Par exemple, une sauvegarde 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 aucune sauvegarde.

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

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

Objet

Inclus dans la sauvegarde

Remarques

Tables permanentes

Oui

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

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 sauvegardes.

Tables dynamiques

Oui

Les tables dynamiques ont leur langage de définition des données (DDL) pour les sauvegardes. Vous pouvez exécuter les commandes CREATE BACKUP SET FOR DYNAMIC TABLE et CREATE DYNAMIC TABLE FROM BACKUP SET. Lorsque vous restaurez une table dynamique à partir d’une sauvegarde, la table est restaurée dans un état suspendu. 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 la sauvegarde. Les UDFs Java dans les sauvegardes ont les mêmes exigences que dans Limites du clonage.

Flux

Non

Tâches

Oui

Les tâches sont incluses dans la sauvegarde. Les tâches restaurées à partir d’une sauvegarde 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 une sauvegarde 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 la sauvegarde est soumise à un autre type de politique (par exemple, une politique d’agrégation, une politique de projection, ou une politique de cycle de vie du stockage), la création de la sauvegarde é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 la sauvegarde a été créée.

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 de sauvegardes

Lorsque vous créez un ensemble de sauvegardes pour une base de données, un schéma ou une table, Snowflake associe l’ensemble de sauvegardes à 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 plus ajouter de sauvegardes à cet ensemble de sauvegardes. 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’une sauvegarde.

Si vous renommez l’objet d’origine, vous pouvez continuer à en faire d’autres sauvegardes en ajoutant des sauvegardes au même ensemble de sauvegardes. Dans ce cas, la sortie de SHOW BACKUP 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 de sauvegardes pour le schéma ou la base de données qui contient cette table. Ainsi, vous pouvez continuer à utiliser le même ensemble de sauvegardes, quelles que soient les modifications apportées à la table.

Lorsque vous restaurez une table à partir d’une sauvegarde, 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 la sauvegarde, et continuer à utiliser le même ensemble de sauvegardes 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.

Sauvegardes et chiffrement

Les données des ensembles de sauvegardes 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 sauvegardes.

Sauvegardes et lignée des données

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

Coût des sauvegardes

Le tableau suivant décrit les frais associés aux sauvegardes.

Pour plus d’informations sur la consommation des crédits, consultez `le tableau de consommation du service Snowflake<https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf>`_.

Composant des coûts

Description

Facturé

Calcul de sauvegarde

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

Oui

Restaurer le calcul

Les entrepôts gérés par Snowflake sont utilisés pour restaurer des objets à partir de sauvegardes.

Oui

Stockage de sauvegarde

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

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

Vous pouvez surveiller les coûts de stockage des sauvegardes dans la vue TABLE_STORAGE_METRICS à l’aide de la colonne RETAINED_FOR_CLONE_BYTES, ainsi que dans la vue BACKUP_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 sauvegardes.

Privilège

Type d’objet

Description

CREATE BACKUP POLICY

Schéma

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

CREATE BACKUP SET

Schéma

Permet de créer un ensemble de sauvegardes 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 de sauvegardes nécessite également le privilège approprié sur l’objet qui est le sujet de l’ensemble de sauvegardes : SELECT pour une sauvegarde de tables, ou USAGE pour une sauvegarde de schémas ou une sauvegarde de bases de données.

APPLY

Politique de sauvegarde

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

APPLY BACKUP RETENTION LOCK

Compte

Permet de créer et d’appliquer des politiques de sauvegardes avec verrou 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éer une politique de sauvegarde avec un verrou de rétention.

  • Appliquer une politique de sauvegarde avec un verrou de rétention sur un ensemble de sauvegardes.

  • Créer une sauvegarde, manuellement par un utilisateur ou automatiquement selon une planification, dans un ensemble de sauvegardes 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’une sauvegarde. Par défaut, le rôle ACCOUNTADMIN dispose de ce privilège.

Les exigences de privilège suivantes s’appliquent lorsque Snowflake crée ou met fin automatiquement à des sauvegardes en arrière-plan. Le propriétaire de l’ensemble de sauvegardes doit avoir les privilèges suivants :

  • Le privilège approprié sur l’objet qui est l’objet de l’ensemble de sauvegardes : SELECT pour une sauvegarde de table, ou USAGE pour une sauvegarde de schéma ou une sauvegarde de base de données.

  • Tout privilège sur le schéma ou la base de données parent pour l’objet de l’ensemble de sauvegardes.

  • Tout privilège sur le schéma parent et la base de données de l’ensemble de sauvegardes.

Si l’un de ces privilèges est absent, la création ou l’expiration automatique de la sauvegarde échoue. Vous pouvez surveiller ces opérations d’arrière-plan à l’aide de la vue ACCOUNT_USAGE.BACKUP_OPERATION_HISTORY.

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

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 BACKUPSET ou CREATEBACKUPPOLICYWITHGRANTOPTION.

  • 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 de sauvegarde dans le schéma myschema, exécutez l’instruction suivante :

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

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

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

Accorder le privilège APPLY sur une politique de sauvegarde à 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 activer le rôle myrole et appliquer la politique de sauvegarde hourly_backup_policy à un ensemble de sauvegardes, exécutez l’instruction suivante :

GRANT APPLY ON BACKUP POLICY hourly_backup_policy TO ROLE myrole;
Copy

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

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

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

Important

L’application d’une politique de sauvegarde avec un verrou de rétention à un ensemble de sauvegardes 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 de sauvegardes, vous ne pouvez pas révoquer le verrou. Le support Snowflake ne peut pas non plus révoquer un tel verrou de conservation. Les sauvegardes créées avec un verrou de rétention ne peuvent pas être supprimées 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 toutes les sauvegardes, y compris celles avec des verrous de rétention.

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

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

Créer et configurer des sauvegardes

Cette section fournit des exemples de flux de travail pour la création et la restauration de sauvegardes.

  1. Créez une politique de sauvegarde nommée hourly_backup_policy. Les sauvegardes effectuées avec cette politique sont créées toutes les heures et chaque sauvegarde expire après 90 jours.

    CREATE BACKUP POLICY hourly_backup_policy
      SCHEDULE = '60 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'Hourly backups expire after 90 days';
    
    Copy
  2. Créer un ensemble de sauvegardes pour la table t1 avec la politique de sauvegarde hourly_backup_policy :

    CREATE BACKUP SET t1_backups
      FOR TABLE t1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy
  3. Créer un ensemble de sauvegardes pour le schéma s1 avec la politique de sauvegarde hourly_backup_policy :

    CREATE BACKUP SET s1_backups
      FOR SCHEMA s1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy
  4. Créer un ensemble de sauvegardes pour la base de données d1 avec la politique de sauvegarde hourly_backup_policy :

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

Créer des sauvegardes planifiées avec un verrou de rétention

Créez un ensemble de sauvegardes qui crée automatiquement des sauvegardes avec un verrou de rétention sur une planification. Le verrou de rétention empêche toute personne, même les utilisateurs privilégiés, de supprimer ou de modifier des sauvegardes dans tout ensemble de sauvegardes auquel la politique est associée.

Seul un rôle disposant du privilège APPLYBACKUPRETENTIONLOCK sur le compte peut créer une politique de sauvegarde avec verrou de rétention.

Important

L’application d’une politique de sauvegarde avec un verrou de rétention à un ensemble de sauvegardes 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 de sauvegardes, vous ne pouvez pas révoquer le verrou. Le support Snowflake ne peut pas non plus révoquer un tel verrou de conservation. Les sauvegardes créées avec un verrou de rétention ne peuvent pas être supprimées 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 toutes les sauvegardes, y compris celles avec des verrous de rétention.

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

    CREATE BACKUP POLICY daily_backup_policy_with_lock
      WITH RETENTION LOCK
      SCHEDULE = '1440 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'regulatory backups: they have a retention lock and expire after 90 days';
    
    Copy
  2. Créer un ensemble de sauvegardes pour la table t2 avec la politique de sauvegarde daily_backup_policy_with_lock :

    CREATE BACKUP SET t2_backups
      FOR TABLE t2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy
  3. Créer un ensemble de sauvegardes pour le schéma s2 avec la politique de sauvegarde daily_backup_policy_with_lock :

    CREATE BACKUP SET s2_backups
      FOR SCHEMA s2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy
  4. Créer un ensemble de sauvegardes pour la base de données d2 avec la politique de sauvegarde daily_backup_policy_with_lock :

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

Créer des sauvegardes manuellement

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

L’exemple suivant crée un ensemble de sauvegardes de table t1_backups puis y ajoute la première sauvegarde :

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

L’exemple suivant crée une politique de sauvegarde avec des sauvegardes horaires, un ensemble de sauvegardes de table t2_backups qui utilise la politique, puis ajoute une sauvegarde manuelle à l’ensemble de sauvegardes :

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

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

Vous pouvez exécuter des commandes similaires pour ajouter une sauvegarde à un schéma ou à un ensemble de sauvegardes de base de données. Remplacez le nom du schéma ou de la sauvegardes de base de données défini dans la commande ALTER BACKUP SET.

Suspendre une politique de sauvegarde sur un ensemble de sauvegardes

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

L’exemple suivant suspend une politique de sauvegarde sur l’ensemble de sauvegardes t2_backups :

ALTER BACKUP SET t2_backups SUSPEND BACKUP POLICY;
Copy

Vous pouvez également suspendre de manière sélective uniquement la création ou les processus d’expiration de l’ensemble de sauvegardes. L’exemple suivant suspend la création de nouvelles sauvegardes dans l’ensemble de sauvegardes t3_backups, et suspend l’expiration des anciennes sauvegardes de l’ensemble de sauvegardes t4_backups :

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

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

Reprendre une politique de sauvegarde sur un ensemble de sauvegardes

Vous pouvez reprendre des politiques de sauvegarde suspendues. Cela permet de reprendre la création et l’expiration des sauvegardes en fonction de la politique de sauvegarde. Si des sauvegardes ont atteint leur date d’expiration alors que la politique était suspendue, Snowflake supprime ces sauvegardes dès que la politique sera reprise.

L’exemple suivant reprend une politique de sauvegarde sur l’ensemble de sauvegardes t1_backup :

ALTER BACKUP SET t1_backups
  RESUME BACKUP POLICY;
Copy

Vous pouvez également reprendre de manière sélective uniquement la création ou les processus d’expiration de l’ensemble de sauvegardes. L’exemple suivant reprend la création de nouvelles sauvegardes dans l’ensemble de sauvegardes t3_backups, et reprend l’expiration des anciennes sauvegardes à partir de l’ensemble de sauvegardes t4_backups :

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

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

Restaurer une sauvegarde

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

  1. Trouvez l’ID de la sauvegarde de la table à restaurer dans la colonne backup_id :

    SHOW BACKUPS IN BACKUP SET t1_backups ->> SELECT "created_on", "backup_id", "expire_on" FROM $1;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+------------------------------------------+---------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 983e0b66-91eb-41cb-8a0b-037abfec1914 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | b5624ef0-1f35-452f-b132-09d8f0592e52 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | eca1a94a-fd40-46db-a2bc-4afba6a38c0a | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | d38caf14-f8a5-4ba8-a248-8287e0cdcf40 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-----------+-------------------+
    
  2. Trouvez l’IDde la sauvegarde du schéma à restaurer dans la colonne backup_id :

    SHOW BACKUPS IN BACKUP SET s1_backups;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 0a0382e1-d265-46e9-b152-4c3b2b859e65 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 8dbcf919-3393-4590-928f-5481d7f2502f | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | bd729a79-01bc-444d-a550-adaaa31ab62f | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 9a8802c5-5fbd-4200-a09d-43e046103939 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  3. Trouvez l’ID de la sauvegarde de la base de données à restaurer dans la colonne backup_id :

    SHOW BACKUPS IN BACKUP SET d1_backups;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 42435925-4e77-4b01-ba89-8163ac03e12f | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 29c2c1b9-6599-4f0b-87b8-d43377fd7c77 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | a4283984-a063-4415-acc4-0e3c19259fad | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | ffe25397-64b9-4c5f-b061-23a1885dc2dc | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. Restaurez la sauvegarde de la table t1 effectuée le 2024-08-19 18:12:33:

    CREATE TABLE restored_t1 FROM BACKUP SET t1_backups IDENTIFIER 'b5624ef0-1f35-452f-b132-09d8f0592e52';
    
    Copy
  5. Restaurez la sauvegarde du schéma s1 effectuée le 2024-08-19 18:12:33:

    CREATE SCHEMA restored_s1 FROM BACKUP SET s1_backups IDENTIFIER '8dbcf919-3393-4590-928f-5481d7f2502f';
    
    Copy
  6. Restaurez la sauvegarde de la base de données d1 effectuée le 2024-08-19 18:12:33:

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

Supprimer une sauvegarde d’un ensemble de sauvegardes

Pour tout ensemble de sauvegardes, vous ne pouvez supprimer que la sauvegarde la plus ancienne qui n’a pas de conservation légale. Vous le faites en spécifiant l’ID de la sauvegarde. Vous pouvez trouver les sauvegardes qui n’ont pas de conservation légale en examinant la propriété is_under_legal_hold. Vous pouvez trouver la sauvegarde la plus ancienne en examinant la propriété created_on.

Note

Vous ne pouvez pas supprimer une sauvegarde d’un ensemble de sauvegardes si une politique de sauvegarde avec un verrou de rétention est attachée à cet ensemble de sauvegardes, ou si cette sauvegarde particulière est soumise à une période de conservation légale.

La sauvegarde que vous supprimez de l’ensemble de sauvegardes doit être la sauvegarde la plus ancienne de l’ensemble.

  1. Trouvez l’ID de la sauvegarde de la table à supprimer dans la colonne backup_id de la sortie suivante. Le tri par ordre croissant de la colonne created_on place la sauvegarde la plus ancienne en premier. Vous pourriez ajouter LIMIT 1 à la commande SELECT pour ne renvoyer que la ligne contenant les détails de la sauvegarde la plus ancienne.

    SHOW BACKUPS IN BACKUP SET t1_backups ->>
      SELECT "created_on", "backup_id", "expire_on" FROM $1
        WHERE "is_under_legal_hold" = 'N'
        ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 983e0b66-91eb-41cb-8a0b-037abfec1914 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | b5624ef0-1f35-452f-b132-09d8f0592e52 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | eca1a94a-fd40-46db-a2bc-4afba6a38c0a | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | d38caf14-f8a5-4ba8-a248-8287e0cdcf40 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  2. Supprimez la sauvegarde t1_backups créée le 2024-08-19 17:12:28 à l’aide de l”backup_id :

    ALTER BACKUP SET t1_backups DELETE BACKUP IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
    
    Copy
  3. Trouvez l’ID de la sauvegarde du schéma à supprimer dans la colonne backup_id de la sortie suivante :

    SHOW BACKUPS IN BACKUP SET s1_backups ->>
      SELECT "created_on", "backup_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 46a1e22a-8557-432f-a14c-1261a4ca2b34 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 3e42fef6-b895-4055-a59f-179744d015d3 | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 7807d24e-285e-4741-b332-87c32bad5cb6 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | e022e619-ee83-45a0-b2b7-9007e284bdb3 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. Supprimez la sauvegarde s1_backups créée le 2024-08-19 17:12:28 à l’aide de l”backup_id :

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

    SHOW BACKUPS IN BACKUP SET d1_backups ->>
      SELECT "created_on", "backup_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | d3a77432-c98d-4969-91a9-fffae5dd655c | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 0a0382e1-d265-46e9-b152-4c3b2b859e65 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 25e01ee0-ea9d-4bb7-af7f-f3fe87f9409e | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | a12294f5-fc63-49cf-84f1-c7b72f7664af | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  6. Supprimez la sauvegarde d1_backups créée le 2024-08-19 17:12:28 à l’aide de l”backup_id :

    ALTER BACKUP SET d1_backups DELETE BACKUP IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
    
    Copy
  7. Tentez de supprimer une sauvegarde``d1_backups`` plus récente créée le 2024-08-19 21:12:55. Remarquez comment Snowflake vous empêche de supprimer une sauvegarde autre que la plus ancienne de l’ensemble des sauvegardes.

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

Supprimer un ensemble de sauvegardes

Vous pouvez supprimer un ensemble de sauvegardes à l’aide de la commande DROP BACKUP SET.

Note

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

Supprimer l’ensemble de sauvegardes t1_backups :

DROP BACKUP SET t1_backups;
Copy

Supprimer l’ensemble de sauvegardes s1_backups :

DROP BACKUP SET s1_backups;
Copy

Supprimer l’ensemble de sauvegardes d1_backups :

DROP BACKUP SET d1_backups;
Copy

Trouver tous les ensembles de sauvegardes qui contiennent des sauvegardes d’une table spécifique

L’exemple suivant montre comment trouver tous les ensembles de sauvegardes 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 SHOW BACKUP SETS est filtrée pour afficher les ensembles de sauvegardes 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 SHOWBACKUPSETS montre qu’il existe deux ensembles de sauvegardes de base de données pour la base de données my_big_important_database, un ensemble de sauvegardes de schéma pour le schéma my_big_important_database.public et un ensemble de sauvegardes de table pour la table``my_big_important_database.public.my_small_secondary_table``.

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

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

Créer une sauvegarde pour une table avec des dépendances

Les exemples suivants montrent comment vous pouvez créer une sauvegarde 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 de sauvegardes pour la table et y ajoutons une sauvegarde :

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

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

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

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 BACKUP SET dependency_experiments
  IDENTIFIER '0fd44138-b571-449b-be0a-72779501f80e';

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

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 de la même sauvegarde :

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

SELECT * FROM restored_dependent_table;
Copy

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 une sauvegarde 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 sauvegardes de schéma ou des sauvegardes de base de données pour les tables dynamiques, afin que la table d’origine et la table dynamique puissent être incluses dans la même sauvegarde.

Si vous créez une sauvegarde de table pour une table dynamique, vous incluez le mot-clé DYNAMIC dans la commande CREATEBACKUPSET, ainsi que dans la commande CREATETABLE lorsque vous effectuez une restauration à partir d’une sauvegarde. L’exemple suivant configure la table dynamique, une sauvegarde de table définie pour cette table et crée la première sauvegarde :

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

CREATE BACKUP SET dynamic_table_backups
  FOR DYNAMIC TABLE my_dynamic_table;

ALTER BACKUP SET dynamic_table_backups ADD BACKUP;
Copy

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

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

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

Astuce

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

Surveillance des sauvegardes et des opérations de sauvegarde

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

Information Schema

Utilisation du compte :

Utilisation de l’organisation :

Rubriques de référence SQL

Politique de sauvegarde

Ensemble de sauvegardes

Sauvegardes

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

Restauration d’objets à partir de sauvegardes

Vous utilisez la syntaxe CREATE object_kind FROM BACKUP SET pour restaurer chaque type d’objet à partir du type approprié d’ensemble de sauvegardes.

Les autres sauvegardes de l’ensemble de sauvegardes utilisent l’objet original, 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 de sauvegardes 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 sauvegardes, aux ensembles de sauvegarde et aux politiques de sauvegarde.

Vues du schéma d’information

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

Vues d’utilisation du compte

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

Vues de l’utilisation de l’organisation

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

Modification terminologique

La fonctionnalité s’appelle désormais sauvegardes au lieu d’instantanés. Toutes les commandes SQL, vues et privilèges utilisent la terminologie BACKUP :

  • CREATE BACKUP POLICY, CREATE BACKUP SET

  • ALTER BACKUP POLICY, ALTER BACKUP SET

  • DROP BACKUP POLICY, DROP BACKUP SET

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

  • Vues BACKUPS, BACKUP_POLICIES, BACKUP_SETS dans Utilisation du compte, Utilisation de l’organisation et Schéma d’information

  • Privilèges APPLY BACKUP POLICY, APPLY BACKUP RETENTION LOCK

Les anciens noms SNAPSHOT/SNAPSHOTS sont toujours présents mais obsolètes en faveur de leurs équivalents BACKUP/BACKUPS. Par exemple :

  • CREATE SNAPSHOT POLICY est obsolète ; utilisez CREATE BACKUP POLICY à la place.

  • La vue SNAPSHOTS est obsolète ; utilisez la vue BACKUPS à la place.

  • Le privilège APPLY SNAPSHOT POLICY est obsolète ; utilisez le privilège APPLY BACKUP POLICY à la place.

Les commandes, vues et privilèges obsolètes continuent de fonctionner, mais Snowflake a l’intention de les supprimer dans une future version.