Backups para recuperação em caso de desastre e armazenamento imutável

Os backups ajudam as organizações a proteger dados críticos contra modificação ou exclusão.

Os backups representam instantâneos discretos de objetos Snowflake. Você escolhe quais objetos fazer backup, com que frequência, por quanto tempo manter os backups e se deseja adicionar um bloqueio de retenção para que eles não sejam excluídos prematuramente.

Casos de uso para backups do Snowflake

Os seguintes casos de uso são aplicações comuns de backups:

Conformidade regulatória:

Os backups com bloqueio de retenção ajudam organizações, instituições financeiras e setores relacionados a atender às regulamentações que exigem que os registros sejam mantidos em um formato imutável.

Nota

A Snowflake contratou a Cohasset Associates para realizar uma avaliação independente de nosso recurso de backups em relação à conformidade com os principais requisitos regulatórios de manutenção de registros, incluindo SEC 17a-4(f), SEC 18a-6(e), FINRA Rule 4511(c) e CFTC Rule 1.31(c)-(d). A avaliação da Cohasset representa uma verificação independente de terceiros de que os controles de armazenamento imutáveis do Snowflake oferecem suporte à criação, proteção e retenção de dados, e proporciona aos clientes a confiança de que o Snowflake atende aos padrões críticos do setor em relação à retenção de dados regulamentados sujeitos aos regulamentos avaliados.

Para acessar o relatório de conformidade completo que se aplica aos backups do Snowflake com bloqueio de retenção, consulte o Snowflake Compliance Center.

Recuperação:

Os backups ajudam as organizações a criar instantâneos discretos para proteger e recuperar dados críticos para os negócios em caso de modificações ou exclusões acidentais.

Resiliência cibernética:

Os backups com bloqueio de retenção fazem parte de uma estratégia geral de resiliência cibernética. Eles ajudam as organizações a proteger dados críticos para os negócios durante ataques cibernéticos, especialmente de ransomware. O bloqueio de retenção garante que esses dados não possam ser excluídos pelo invasor, mesmo que ele obtenha acesso à conta usando as funções ACCOUNTADMIN ou ORGADMIN.

Principais conceitos

Esta seção apresenta uma visão geral dos principais conceitos para backups no Snowflake.

Backup

Um backup representa um instantâneo pontual de um objeto.

  • O objeto pode ser uma única tabela, um esquema ou um banco de dados inteiro.

  • Um backup específico pode ser identificado por um ID exclusivo gerado pelo Snowflake.

  • Um backup não pode ser modificado. No entanto, ele pode ser excluído, e o período de expiração do backup pode ser modificado (a menos que um bloqueio de retenção seja aplicado).

Durante as operações diárias, você raramente interage com backups individuais. Em vez disso, você gerencia os conjuntos de backups que os contêm. Por exemplo, para obter uma lista de backups, execute o comando SHOW BACKUPS IN BACKUP SET. Execute o comando ALTER BACKUP SET para criar um novo backup.

Conjunto de backups

Um conjunto de backups é um objeto no nível do esquema que contém um conjunto de backups para um banco de dados, esquema ou tabela específicos. O Snowflake tem comandos SQL para CREATE, ALTER, DROP, SHOW e DESCRIBE conjuntos de backups.

Você pode ter vários conjuntos de backups para o mesmo objeto.

O ciclo de vida dos backups em um conjunto é determinado por uma política de backup opcional que você anexa ao conjunto de backups. Você também pode adicionar ou excluir backups manualmente de um conjunto de backups. Sua capacidade de excluir backups é afetada por outros fatores, em particular o bloqueio de retenção e a retenção legal.

Política de backup

Uma política de backup é um objeto no nível do esquema que contém as configurações que definem o ciclo de vida dos backups em um conjunto. Essas configurações incluem agendamento, expiração e bloqueio de retenção.

  • O cronograma determina quando os backups são criados. Ele pode ser definido como um intervalo em minutos ou como uma expressão cron. Por exemplo, se o cronograma for definido como uma hora, um backup do objeto será feito a cada 60 minutos.

  • O período de expiração é o tempo de validade do backup. Após a expiração de um backup, o Snowflake o exclui automaticamente, a menos que uma retenção legal seja aplicada ao backup específico.

    Dica

    Se o conjunto de backups não tiver um bloqueio de retenção e o backup específico não tiver uma retenção legal aplicada, você poderá excluir o backup manualmente antes do término do período de expiração. É possível excluir manualmente um backup de cada vez, começando sempre pelo mais antigo sem retenção legal.

Cada política de backup deve ter uma ou as duas propriedades de cronograma e de período de expiração. Por exemplo, você pode criar uma política com um cronograma e um período de expiração e deixar que o Snowflake cuide da criação e remoção dos backups de todos os conjuntos aos quais a política é aplicada. Se preferir, crie uma política com um cronograma e sem período de expiração se quiser gerenciar a remoção de backups mais antigos por conta própria. Como alternativa, você também pode criar uma política com um período de expiração, mas sem cronograma, e gerenciar a criação de backups por conta própria. Não é possível criar uma política sem agendamento e sem período de expiração.

Se você associar uma política de backup a um conjunto de backups, faça isso ao criar o conjunto de backups ou aplique a política mais tarde. Como alternativa, você pode ter um conjunto de backups sem uma política de backup associada. Nesse caso, você controla manualmente quando fazer novos backups e expirar os antigos.

Você pode aplicar uma política de backup a vários conjuntos de backups. Se você modificar uma política de backup, o Snowflake aplicará as alterações a todos os conjuntos de backups aos quais a política está anexada.

Bloqueio de retenção

Um bloqueio de retenção protege o backup contra exclusão pelo período de expiração definido. Você pode usar um backup com bloqueio de retenção para conformidade regulatória e resiliência cibernética de backups. As seguintes restrições se aplicam a um conjunto de backups com bloqueio de retenção:

  • Os backups não podem ser excluídos por nenhuma função, incluindo ACCOUNTADMIN.

  • Não é possível diminuir o período de expiração do backup, mas você pode aumentá-lo.

  • Não é possível descartar um conjunto que tenha backups não expirados.

  • Não é possível descartar um esquema que tenha um conjunto de backups com backups não expirados.

  • Não é possível descartar um banco de dados que tenha um conjunto de backups com backups não expirados.

  • Não é possível descartar uma conta que tenha um banco de dados com um conjunto de backups com backups não expirados.

Importante

Aplicar uma política de backup com um bloqueio de retenção a um conjunto de backups é uma ação irreversível. Devido às garantias rigorosas necessárias para a conformidade regulatória, depois de inserir um bloqueio de retenção em um conjunto de backups, não será possível revogar o bloqueio. O suporte Snowflake também não pode revogar esse bloqueio de retenção. Planeje com cuidado antes de definir um bloqueio de retenção em um conjunto de backups com um longo período de expiração, para evitar cobranças inesperadas de armazenamento para conjuntos de backups não excluíveis e para os esquemas e bancos de dados que os contêm.

Se uma organização Snowflake for excluída, ela deixará de ser um cliente Snowflake. Nesse caso, o Snowflake exclui todos os backups, incluindo aqueles com bloqueios de retenção. A exclusão de uma organização Snowflake requer o envolvimento do suporte Snowflake. Não é algo que um administrador possa fazer por acidente.

Visão geral do ciclo de vida do backup

O diagrama a seguir mostra como os objetos, os backups, os conjuntos de backups e as políticas de backup do Snowflake se relacionam. O diagrama envolve o tipo mais simples de backup: um para uma única tabela. Cada operação de backup produz um backup novo. Todos os backups de um determinado objeto são agrupados em um conjunto de backups. A adição e a remoção automáticas de backups do conjunto são controladas pela política de backup. Para recuperar as informações de um backup, use o comando CREATE para criar um objeto novo de um backup específico.

Principais conceitos dos backups

Como funcionam os backups

Backups são duplicatas de cópia zero de um objeto Snowflake, semelhantes a clones. Os backups não fazem cópias dos dados da tabela quando são criados. O mecanismo de backup faz o backup dos dados da tabela, sem gerar custos ou tempo extras para a cópia de dados.

O Snowflake armazena os dados em arquivos imutáveis ​​e mantém ponteiros dos backups para os arquivos de dados subjacentes à tabela. À medida que a tabela evolui e é modificada, o Snowflake garante que cada arquivo de dados esteja protegido contra exclusão, desde que haja um backup não expirado que faça referência a esse arquivo.

Restrições dos backups

O Snowflake impõe as seguintes restrições aos backups:

  • Não é possível modificar o bloqueio de retenção de uma política de backup.

  • Quando uma política tem um bloqueio de retenção, você pode aumentar o período de expiração, mas não diminuí-lo.

  • O intervalo mínimo do cronograma para backups agendados é de uma hora (60 minutos).

Limitações dos backups

Você pode criar no máximo dois conjuntos de backups de banco de dados para um banco de dados específico. Da mesma forma, você pode criar no máximo dois conjuntos de backups de esquema para um esquema específico e dois conjuntos de backups de tabela para uma tabela específica. Um objeto ainda pode aparecer em mais de dois conjuntos de backups. Por exemplo, uma tabela pode ter um ou dois conjuntos de backups de tabela associados. A mesma tabela também pode estar incluída em um ou dois conjuntos de backups de esquema, e um ou dois conjuntos de backups de banco de dados.

Comparação de backups com outros recursos de recuperação em caso de desastre e continuidade dos negócios

Os backups oferecem as seguintes vantagens, que são diferentes dos outros recursos de continuidade dos negócios e recuperação em caso de desastre do Snowflake, como replicação e Time Travel:

  • Você pode habilitar a retenção de longo prazo para backups. A retenção de longo prazo auxilia na recuperação, conformidade regulatória e resiliência cibernética contra ameaças como ransomware ou ataques internos.

  • O bloqueio de retenção garante que os backups não sejam excluídos por nenhum usuário, incluindo administradores de conta.

  • Você pode agendar backups em um período diferente daquele usado em outras operações de transferência de dados, como atualizações de replicação.

  • Você pode fazer backup e restaurar objetos de tabelas individuais ou de contêineres, como esquemas ou bancos de dados inteiros.

  • Você pode impedir que o tempo de retenção dos backups seja reduzido após a realização do backup usando uma política de backup com bloqueio de retenção. Isso é diferente do recurso Time Travel, em que você pode reduzir o intervalo de retenção para zero.

  • Ao contrário do Time Travel e do Fail-Safe, os backups preservam dados de mais tipos de objetos do que apenas tabelas e dados de tabelas.

  • A velocidade e a eficiência de armazenamento da realização de backups são semelhantes ao mecanismo de cópia zero usado para clonagem.

  • A maneira como todos os backups do mesmo objeto são agrupados em conjuntos de backups torna o gerenciamento mais simples do que se você usasse clones para implementar o próprio mecanismo de backup. Por exemplo, você não precisa gerenciar um grande número de objetos, criar um esquema de nomenclatura para acompanhar os objetos clonados ou implementar um mecanismo de agendamento para excluir clones antigos. Além disso, ao contrário dos objetos clonados, os backups não podem ser modificados após a criação.

  • Cada backup representa uma única tabela, esquema ou banco de dados a partir do ponto no tempo especificado. Os backups não incluem objetos no nível da conta, como usuários ou funções. Alguns tipos de tabelas e outros objetos no nível do banco de dados não são incluídos nos backups de esquema e banco de dados. Para obter mais informações, consulte objetos de backup.

  • Objetos relacionados a backups são armazenados na mesma região do provedor de serviços de nuvem (Cloud Service Provider, CSP) que o banco de dados, o esquema ou a tabela associados. Para cenários de continuidade dos negócios e recuperação em caso de desastre, normalmente você combina backups com replicação de contas Snowflake. Dessa forma, todos os conjuntos e as políticas de backups podem ser replicados para uma região ou um CSP diferente e recuperados mesmo se houver uma interrupção que afete a região ou o CSP original.

  • Conjuntos e políticas de backups não podem ser clonados. Se você clonar um esquema ou banco de dados que contenha esses objetos, eles não serão incluídos no esquema ou banco de dados clonado.

Objetos de backup

Você pode criar conjuntos de backups para tabelas, esquemas e bancos de dados.

Referências de tabelas a outros objetos

Objetos, como exibições ou funções, podem fazer referência a objetos fora do esquema ou do banco de dados no backup. Para garantir que essas referências continuem funcionando após a restauração de um backup, siga uma destas estratégias:

  • Se as tabelas e os outros objetos aos quais elas se referem estiverem todos no mesmo esquema ou banco de dados, crie um conjunto de backups para todo o esquema ou banco de dados. Dessa forma, o Snowflake restaura todos os objetos interconectados de uma vez quando você faz a restauração a partir do backup.

  • Se os objetos em um conjunto de backups fizerem referência a objetos que não estão incluídos no conjunto de backups, esteja ciente de que, quando um backup for restaurado, as referências dos objetos restaurados apontarão para os objetos originais do outro banco de dados ou esquema. Se você descartou esses outros objetos ou alterou as propriedades deles depois de fazer o backup, pode encontrar erros ao acessar os objetos restaurados.

  • Para objetos em nível de conta, todas as referências de objetos restaurados sempre apontam para o objeto original em nível de conta. Isso ocorre porque os objetos no nível da conta não fazem parte de nenhum backup. Por exemplo, um backup de esquema pode conter um segredo que se refere a uma integração de segurança. A integração de segurança é um objeto no nível da conta e não pode ser incluída em nenhum backup.

Tipos de objetos em backups de banco de dados e esquema

A tabela a seguir lista os objetos incluídos em um backup de banco de dados ou esquema:

Objeto

Incluído no backup

Notas

Tabelas permanentes

Sim

As informações do Time Travel para tabelas não são armazenadas como parte de um backup.

Tabelas transitórias

Sim

Essas tabelas continuam sendo tabelas transitórias após a restauração. Esquemas e bancos de dados transitórios também mantêm a propriedade transitória após a restauração.

Tabelas temporárias

Não

As tabelas temporárias têm escopo de sessão e não são incluídas em backups.

Tabelas dinâmicas

Sim

As tabelas dinâmicas têm a própria sintaxe de linguagem de definição de dados (Data Definition Language, DDL) para backups. Você pode executar os comandos CREATE BACKUP SET FOR DYNAMIC TABLE e CREATE DYNAMIC TABLE FROM BACKUP SET. Quando você restaura uma tabela dinâmica de um backup, a tabela é restaurada com o estado suspenso. O Snowflake inicializa automaticamente a nova tabela durante sua primeira atualização.

Tabelas externas

Não

Tabelas híbridas

Não

Tabelas Apache Iceberg™

Não

Restrições de tabela

Sim

Tabelas de eventos

Não

Sequências

Sim

Exibições

Sim

Exibições materializadas

Não

Exibições seguras

Sim

Formatos de arquivo

Sim

Estágios internos

Não

Estágios externos

Não

Estágios temporários

Não

Tabelas de diretório

Não

Canais

Não

Procedimentos armazenados

Sim

Os procedimentos SQL, Javascript, Python, Java e Scala são aceitos.

Funções definidas pelo usuário (UDFs)

Sim

As funções SQL, Javascript, Python, Java e Scala são aceitas. Tanto as UDFs escalares quanto as funções de tabela definidas pelo usuário (User-Defined Table Functions, UDTFs) são incluídas no backup. As UDFs Java em backups têm os mesmos requisitos que as Limitações da clonagem.

Fluxos

Não

Tarefas

Sim

As tarefas são incluídas no backup. As tarefas restauradas de um backup são suspensas e devem ser retomadas.

Funções de métricas de dados (DMFs)

Não

Políticas

Sim

Os seguintes tipos de políticas são incluídos em um backup de esquema ou de banco de dados:

  • Segurança em nível de coluna (mascaramento)

  • Políticas de acesso a linhas

  • Políticas de mascaramento baseadas em tags

Se qualquer tabela incluída no backup tiver algum outro tipo de política aplicada (por exemplo, uma política de agregação, de projeção ou de ciclo de vida de armazenamento), a criação do backup falhará.

Conceções

Sim

Se você remover uma função, as concessões de propriedade associadas serão transferidas para a função que executa o comando DROP ROLE. Concessões diferentes de propriedade são excluídas neste caso. Portanto, as concessões em um objeto restaurado podem ser diferentes das que existiam quando o backup foi criado.

Funções de banco de dados

Não

Marcação de objetos

Sim

Alertas

Sim

Regras de rede

Sim

Repositórios do Github

Não

Modelos

Não

Monitores de modelo

Não

Conjuntos de dados

Não

Notebooks

Não

Contatos

Não

Serviços de pesquisa do Cortex

Não

Projetos Dbt

Não

Repositórios de imagens

Não

Listagens

Não

Listagens de organizações

Não

Canais

Não

Política (agregação)

Não

Política (autenticação)

Não

Política (recurso)

Não

Política (junção)

Não

Política (pacotes)

Não

Política (senha)

Não

Política (privacidade)

Não

Política (projeção)

Não

Política (sessão)

Não

Taxa de transferência provisionada

Não

Exibições semânticas

Não

Serviços

Não

Streamlits

Não

Como o Snowflake associa objetos aos conjuntos de backups deles

Quando você cria um conjunto de backups para um banco de dados, um esquema ou uma tabela, o Snowflake associa o conjunto de backups ao ID interno do banco de dados, do esquema ou da tabela. Se você excluir o objeto original, não poderá adicionar outros backups ao conjunto de backups. Esse comportamento se aplica mesmo quando você recria um objeto com o mesmo nome ou o substitui por um restaurado de um backup.

Em vez disso, se você renomear o objeto original, poderá continuar fazendo mais backups dele adicionando outros backups ao mesmo conjunto. Nesse caso, a saída de SHOW BACKUP SETS será alterada para refletir o valor OBJECT_NAME do objeto renomeado.

Se você deseja fazer backups de uma tabela, mas costuma remover e recriar essa tabela, talvez por meio das instruções CREATE OR REPLACE, inclua a tabela em um conjunto de backups para o esquema ou o banco de dados que a contém. Dessa forma, é possível continuar usando o mesmo conjunto de backups, independentemente das alterações na tabela.

Ao restaurar uma tabela de um backup, ela começa com um nome diferente do original. Suponha que você queira substituir completamente o conteúdo da tabela original pelos dados do backup e continuar usando o mesmo conjunto de backups para mais backups dessa mesma tabela. Nesse caso, use uma instrução TRUNCATE ou DELETE para remover o conteúdo da tabela original e uma instrução INSERT … SELECT para copiar os dados da tabela restaurada. Não exclua a tabela original e renomeie a tabela restaurada com o nome da original.

Backups e criptografia

Os dados dos conjuntos de backups são protegidos pela mesma criptografia de ponta a ponta que os demais objetos e dados de tabelas do Snowflake. Para obter mais informações sobre a criptografia do Snowflake, consulte Explicação da criptografia de ponta a ponta no Snowflake.

A rotação de chaves também se aplica aos dados em backups.

Backups e linhagem de dados

O Snowflake não preserva metadados de linhagem de dados com backups de banco de dados, esquema e tabela. Depois de restaurar um objeto de um backup, você não poderá usar o Snowsight para visualizar informações de linhagem dos dados restaurados.

Custo dos backups

A tabela a seguir descreve as cobranças pelos backups.

Para obter informações sobre o consumo de crédito, consulte a Tabela de consumo de serviços do Snowflake.

Componente de custo

Descrição

Cobrado

Computação de backup

O serviço de computação gerenciado pelo Snowflake gera a criação e a expiração de backups agendados.

Sim

Computação de restaurações

Os warehouses gerenciados pelo Snowflake são usados ​​para restaurar objetos de backups.

Sim

Armazenamento de backups

Armazenamento de objetos em nuvem gerenciado pelo Snowflake para armazenar dados de backups.

Cobrado por bytes retidos para backups, semelhante aos bytes retidos para clones.

É possível monitorar os custos de armazenamento de backups na exibição TABLE_STORAGE_METRICS, usando a coluna RETAINED_FOR_CLONE_BYTES, e na exibição BACKUP_STORAGE_USAGE.

Privilégios de controle de acesso

A tabela a seguir lista os privilégios e o tipo de objeto ao qual o privilégio é concedido para gerenciar e usar backups.

Privilégio

Tipo de objeto

Descrição

CREATE BACKUP POLICY

Esquema

Permite criar uma política de backup em um esquema. A função que concede esse privilégio também deve ter o privilégio USAGE no esquema.

CREATE BACKUP SET

Esquema

Permite criar um conjunto de backups em um esquema. A função que concede esse privilégio também deve ter o privilégio USAGE no esquema. Para criar o conjunto de backups, também é necessário o privilégio apropriado no objeto que é a entidade do conjunto: SELECT para um backup de tabela ou USAGE para um backup de esquema ou de banco de dados.

APPLY

Política de backup

Permite aplicar uma política de backup específica. Somente um usuário com a função ACCOUNTADMIN pode conceder esse privilégio.

APPLY BACKUP RETENTION LOCK

Conta

Permite criar e aplicar políticas de backup com bloqueio de retenção. Esse privilégio é concedido à função ACCOUNTADMIN e pode ser delegada.

Esse privilégio é necessário para permitir que uma função faça o seguinte:

  • Crie uma política de backup com bloqueio de retenção.

  • Aplique uma política de backup com bloqueio de retenção a um conjunto de backups.

  • Crie um backup, manualmente com um usuário ou automaticamente de acordo com um cronograma, em um conjunto de backups protegido por uma política com bloqueio de retenção.

APPLY LEGAL HOLD

Conta

Permite adicionar ou remover uma retenção legal de um backup. Por padrão, a função ACCOUNTADMIN tem este privilégio.

Os seguintes requisitos de privilégio se aplicam quando o Snowflake cria ou expira automaticamente backups em segundo plano. O proprietário do conjunto de backups precisa ter os seguintes privilégios:

  • O privilégio apropriado no objeto que é a entidade do conjunto de backups: SELECT para um backup de tabela ou USAGE para um backup de esquema ou de banco de dados.

  • Qualquer privilégio no esquema ou banco de dados pai para a entidade do conjunto de backups.

  • Qualquer privilégio no esquema e banco de dados pai do conjunto de backups.

Se algum desses privilégios estiver ausente, a criação ou expiração automática do backup falhará. Você pode monitorar essas operações em segundo plano usando a exibição ACCOUNT_USAGE.BACKUP_OPERATION_HISTORY.

Concessão dos privilégios necessários para criar políticas e conjuntos de backups

Nota

  • A função usada para conceder esses privilégios deve ter o privilégio OWNERSHIP no esquema ou ter o privilégio CREATE BACKUP SET ou CREATE BACKUP POLICY WITH GRANT OPTION.

  • Você pode conceder os seguintes privilégios a uma função de conta personalizada ou a uma função de banco de dados.

Para permitir que a função myrole crie uma política de backup no esquema myschema, execute a seguinte instrução:

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

Para permitir que a função myrole crie um conjunto de backups no esquema myschema, execute a seguinte instrução:

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

Concessão do privilégio APPLY em uma política de backup para uma função

Nota

  • Somente um usuário com a função ACCOUNTADMIN pode conceder esse privilégio.

  • Você pode conceder esse privilégio a uma função de conta personalizada ou a uma função de banco de dados.

Para permitir que a função myrole aplique a política de backup hourly_backup_policy a um conjunto de backups, execute a seguinte instrução:

GRANT APPLY ON BACKUP POLICY hourly_backup_policy TO ROLE myrole;
Copy

Conceder o privilégio APPLY BACKUP RETENTION LOCK a uma função

Você pode conceder a uma função o privilégio para aplicar políticas de backup com bloqueio de retenção em conjuntos de backups.

Somente um usuário com a função ACCOUNTADMIN pode conceder esse privilégio.

Importante

Aplicar uma política de backup com um bloqueio de retenção a um conjunto de backups é uma ação irreversível. Devido às garantias rigorosas necessárias para conformidade regulatória, depois de aplicar um bloqueio de retenção a um conjunto de backups, não é possível revogá-lo. O suporte Snowflake também não pode revogar esse bloqueio de retenção. Backups criados com bloqueio de retenção não podem ser excluídos até o término do período de expiração.

Se uma organização Snowflake for excluída, ela deixará de ser um cliente Snowflake. Nesse caso, o Snowflake exclui todos os backups, incluindo aqueles com bloqueios de retenção.

Para permitir que a função retention_lock_admin_role aplique uma política de backup com bloqueio de retenção a um conjunto de backups, execute a seguinte instrução:

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

Criação e configuração de backups

Esta seção apresenta exemplos de fluxos de trabalho para criar e restaurar backups.

  1. Crie uma política de backup chamada hourly_backup_policy. Os backups feitos com essa política são criados de hora em hora, e cada backup expira após 90 dias.

    CREATE BACKUP POLICY hourly_backup_policy
      SCHEDULE = '60 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'Hourly backups expire after 90 days';
    
    Copy
  2. Crie um conjunto de backups para a tabela t1 com a política de backup hourly_backup_policy:

    CREATE BACKUP SET t1_backups
      FOR TABLE t1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy
  3. Crie um conjunto de backups para o esquema s1 com a política de backup hourly_backup_policy:

    CREATE BACKUP SET s1_backups
      FOR SCHEMA s1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy
  4. Crie um conjunto de backups para o banco de dados d1 com a política de backup hourly_backup_policy:

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

Criação de backups agendados com bloqueio de retenção

Crie um conjunto de backups que gere backups automaticamente com bloqueio de retenção conforme um cronograma. O bloqueio de retenção impede que qualquer pessoa, até mesmo usuários privilegiados, exclua ou modifique backups em conjuntos de backups ao qual a política foi anexada.

Somente uma função que tenha o privilégio APPLY BACKUP RETENTION LOCK na conta pode criar uma política de backup com bloqueio de retenção.

Importante

Aplicar uma política de backup com um bloqueio de retenção a um conjunto de backups é uma ação irreversível. Devido às garantias rigorosas necessárias para conformidade regulatória, depois de aplicar um bloqueio de retenção a um conjunto de backups, não é possível revogá-lo. O suporte Snowflake também não pode revogar esse bloqueio de retenção. Backups criados com bloqueio de retenção não podem ser excluídos até o término do período de expiração.

Se uma organização Snowflake for excluída, ela deixará de ser um cliente Snowflake. Nesse caso, o Snowflake exclui todos os backups, incluindo aqueles com bloqueios de retenção.

  1. Crie uma política com um bloqueio de retenção que faça backup diário com período de expiração de 90 dias:

    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. Crie um conjunto de backups para a tabela t2 com a política de backup daily_backup_policy_with_lock:

    CREATE BACKUP SET t2_backups
      FOR TABLE t2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy
  3. Crie um conjunto de backups para o esquema s2 com a política de backup daily_backup_policy_with_lock:

    CREATE BACKUP SET s2_backups
      FOR SCHEMA s2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy
  4. Crie um conjunto de backups para o banco de dados d2 com a política de backup daily_backup_policy_with_lock:

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

Criação manual de backups

Você pode adicionar manualmente um backup a um conjunto de backups a qualquer momento. Esse procedimento faz backup do banco de dados, do esquema ou da tabela associados ao conjunto de backups. Você pode criar backups manualmente, sem considerar se o conjunto de backups também tem ou não backups agendados por uma política de backup. Se houver uma política de backup associada ao conjunto de backups, e ela definir um período de expiração, esse período também se aplicará ao backup manual.

O exemplo a seguir cria um conjunto de backups de tabela t1_backups e adiciona o primeiro backup a ele:

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

O exemplo a seguir cria uma política de backup com backups por hora, um conjunto de backups de tabela t2_backups que usa a política e, em seguida, adiciona um backup manual ao conjunto de backups:

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

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

Você pode executar comandos semelhantes para adicionar um backup a um conjunto de backups de esquema ou banco de dados. Substitua o nome do conjunto de backups de esquema ou banco de dados no comando ALTER BACKUP SET.

Suspensão da política de backup em um conjunto de backups

Ao suspender a política de backup em um conjunto de backups, você impede que a política seja usada para criar novos backups agendados nesse conjunto. Você também suspende a expiração dos backups existentes no conjunto de backups que usa a política de backup. Outros conjuntos de backups que usam a mesma política não são afetados.

O exemplo a seguir suspende uma política de backup no conjunto de backups t2_backups:

ALTER BACKUP SET t2_backups SUSPEND BACKUP POLICY;
Copy

Você também pode suspender seletivamente os processos apenas de criação ou apenas de expiração do conjunto de backups. O exemplo a seguir suspende a criação de novos backups no conjunto de backups t3_backups e suspende a expiração de backups antigos do conjunto de backups t4_backups:

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

Para obter mais informações sobre o comando ALTER BACKUP SET, consulte ALTER BACKUP SET.

Retomada da política de backup em um conjunto de backups

Você pode retomar as políticas de backup suspensas. Isso retoma a criação e a expiração de backups de acordo com a política de backup. Se um backup atingir o tempo de expiração enquanto a política estiver suspensa, o Snowflake o excluirá assim que a política for retomada.

O exemplo a seguir retoma uma política de backup no conjunto de backups t1_backup:

ALTER BACKUP SET t1_backups
  RESUME BACKUP POLICY;
Copy

Você também pode retomar seletivamente os processos apenas de criação ou apenas de expiração do conjunto de backups. O exemplo a seguir retoma a criação de novos backups no conjunto de backups t3_backups e retoma a expiração de backups antigos do conjunto de backups t4_backups:

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

Para obter mais informações sobre o comando ALTER BACKUP SET, consulte ALTER BACKUP SET.

Restauração de um backup

Você pode restaurar um objeto de um conjunto de backups usando o ID do backup específico. Por exemplo, para restaurar a tabela t1 do conjunto de backups t1_backups no esquema atual, execute as seguintes instruções:

  1. Encontre o ID do backup da tabela a ser restaurado na coluna 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. Encontre o ID do backup do esquema a ser restaurado na coluna 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. Encontre o ID do backup do banco de dados a ser restaurado na coluna 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. Restaure o backup da tabela t1 feito em 2024-08-19 18:12:33:

    CREATE TABLE restored_t1 FROM BACKUP SET t1_backups IDENTIFIER 'b5624ef0-1f35-452f-b132-09d8f0592e52';
    
    Copy
  5. Restaure o backup do esquema s1 feito em 2024-08-19 18:12:33:

    CREATE SCHEMA restored_s1 FROM BACKUP SET s1_backups IDENTIFIER '8dbcf919-3393-4590-928f-5481d7f2502f';
    
    Copy
  6. Restaure o backup do banco de dados d1 feito em 2024-08-19 18:12:33:

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

Exclusão do backup de um conjunto de backups

Para qualquer conjunto de backups, você só pode excluir o backup mais antigo que não tem uma retenção legal. Para fazer isso, especifique o ID do backup. Você pode encontrar os backups que não têm retenção legal examinando a propriedade is_under_legal_hold. Você pode encontrar o backup mais antigo examinando a propriedade created_on.

Nota

Não será possível excluir um backup de um conjunto se uma política de backup com bloqueio de retenção estiver anexada ao conjunto, ou se esse backup específico tiver uma retenção legal aplicada.

O backup que você excluir do conjunto de backups deve ser o mais antigo do conjunto.

  1. Encontre o ID do backup da tabela a ser excluído na coluna backup_id na saída a seguir. Classificar em ordem crescente pela coluna created_on coloca o backup mais antigo em primeiro lugar. Você pode adicionar LIMIT 1 ao comando SELECT para retornar apenas a linha com os detalhes do backup mais antigo.

    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. Exclua o backup t1_backups criado em 2024-08-19 17:12:28 usando o backup_id:

    ALTER BACKUP SET t1_backups DELETE BACKUP IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
    
    Copy
  3. Encontre o ID do backup do esquema a ser excluído na coluna backup_id na seguinte saída:

    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. Exclua o backup s1_backups criado em 2024-08-19 17:12:28 usando o backup_id:

    ALTER BACKUP SET s1_backups DELETE BACKUP IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
    
    Copy
  5. Encontre o ID do backup do banco de dados a ser excluído na coluna backup_id na seguinte saída:

    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. Exclua o backup d1_backups criado em 2024-08-19 17:12:28 usando o backup_id:

    ALTER BACKUP SET d1_backups DELETE BACKUP IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
    
    Copy
  7. Tente excluir um backup mais recente de d1_backups criado em 2024-08-19 21:12:55. Observe como o Snowflake impede que você exclua um backup diferente daquele mais antigo no conjunto de backups.

    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.
    

Exclusão de um conjunto de backups

Você pode excluir um conjunto de backups usando o comando DROP BACKUP SET.

Nota

Não é possível excluir um conjunto de backups que tenha um bloqueio de retenção e backups não expirados. Também não é possível excluir um conjunto de backup quando algum de seus backups tem uma retenção legal.

Excluir o conjunto de backups t1_backups:

DROP BACKUP SET t1_backups;
Copy

Excluir o conjunto de backups s1_backups:

DROP BACKUP SET s1_backups;
Copy

Excluir o conjunto de backups d1_backups:

DROP BACKUP SET d1_backups;
Copy

Localização de todos os conjuntos que contêm backups de uma tabela específica

O exemplo a seguir mostra como encontrar todos os conjuntos de backups que contêm uma tabela específica em um determinado esquema e banco de dados. O comando SHOW TABLES usa um operador de pipe para recuperar os nomes do banco de dados, esquema e tabela e armazená-los em variáveis. A saída SHOW BACKUP SETS é filtrada para mostrar os conjuntos de backups que fazem backup do banco de dados que contém a tabela, ou do esquema que contém a tabela, ou que contêm essa única tabela.

A saída filtrada de SHOW BACKUP SETS mostra que há dois conjuntos de backups para o banco de dados my_big_important_database, um conjunto de backups para o esquema my_big_important_database.public e um conjunto de backups para a tabela 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  |
+-------------+------------------+---------------------------+-------------+---------------------------+

Criação de backup para uma tabela com dependências

Os exemplos a seguir mostram como você pode criar um backup para uma tabela que faça referência a uma sequência e uma chave estrangeira em um esquema diferente. Para nos prepararmos, criamos o esquema other_schema contendo uma sequência e uma tabela. Em seguida, criamos a tabela principal no esquema public, referenciando a sequência e a outra tabela.

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

A saída GET_DDL() mostra as referências que apontam para o outro esquema:

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

Em seguida, criamos o conjunto de backups para a tabela e adicionamos um backup a ele:

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

A saída SHOW BACKUPS contém o valor backup_id a ser usado para a operação de restauração:

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

Restauramos essa tabela com um nome novo e confirmamos que a tabela restaurada se refere aos objetos no outro esquema:

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

Para ilustrar o que acontece se o objeto referenciado não existir mais, descartamos a sequência e restauramos a tabela novamente a partir do mesmo backup:

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

Consultar a tabela ainda funciona:

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

No entanto, operações como GET_DDL(), DESCRIBE e INSERT falham porque dependem de uma sequência que não existe mais:

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.

Criação de backup para uma tabela dinâmica

Uma tabela dinâmica sempre envolve uma referência a alguma outra tabela. Por esse motivo, talvez você prefira usar backups de esquema ou de banco de dados para tabelas dinâmicas, para que as tabelas original e dinâmica possam ser incluídas no mesmo backup.

Se você criar um backup para uma tabela dinâmica, inclua a palavra-chave DYNAMIC no comando CREATE BACKUP SET e no comando CREATE TABLE ao restaurar de um backup. O exemplo a seguir configura a tabela dinâmica, um conjunto de backups para essa tabela e cria o primeiro backup:

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

O exemplo a seguir mostra como determinar IDs para os backups criados em vários momentos. Neste caso, o backup mais recente é a primeira linha do conjunto de resultados. Em seguida, você usa o ID do backup no comando 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

Dica

Ao restaurar uma tabela dinâmica de um backup, o Snowflake inicializa automaticamente a nova tabela durante a primeira atualização.

Monitoramento de backups e operações de backup

Você pode determinar quais objetos relacionados ao backup existem, as propriedades deles e quanto armazenamento eles usam consultando as seguintes exibições.

Esquema de informações:

Uso da conta:

Uso da organização:

Tópicos de referência a SQL

Política de backup

Conjunto de backups

Backups

Você não executa um comando CREATE BACKUP propriamente dito. Para criar um novo backup, execute ALTER BACKUP SET … ADD BACKUP. Se preferir, quando você associar o conjunto de backups a uma política de backup que tenha um cronograma, o Snowflake criará backups no conjunto automaticamente com base no cronograma especificado. Para excluir um backup mais antigo, execute ALTER BACKUP SET … DELETE BACKUP. Essas operações exigem que você especifique o identificador de um backup específico. Você encontra os identificadores dos backups, junto com outras informações, como a data de criação dos backups, usando o comando a seguir.

Restauração de objetos dos backups

Use a sintaxe CREATE object_kind FROM BACKUP SET para restaurar cada tipo de objeto a partir do tipo apropriado de conjunto de backups.

Outros backups no conjunto de backups usam o objeto original, não o restaurado. Isso se aplica mesmo que você renomeie o objeto restaurado com o mesmo nome do original. Se quiser continuar usando o mesmo conjunto de backups após uma restauração, restaure o objeto com um nome novo e transfira os dados de volta ao objeto original.

Exibições

As exibições do sistema a seguir contêm metadados relacionados a backups, conjuntos de backups e políticas de backup.

Visualizações do esquema de informações

Essas visualizações no esquema INFORMATION_SCHEMA contêm informações sobre objetos relacionados a backups que existem atualmente:

Visualizações do uso da conta

Essas visualizações no esquema ACCOUNT_USAGE contêm informações no nível da conta sobre objetos relacionados a backups que existem ou foram descartados, as operações que foram executadas nos backups e o armazenamento que eles usam:

Visualizações do uso da organização

Essas visualizações no esquema ORGANIZATION_USAGE contêm informações no nível da organização sobre objetos relacionados a backups que existem ou foram descartados, as operações que foram executadas nos backups e o armazenamento que eles usam:

Alteração de terminologia

O recurso agora é chamado de backups em vez de instantâneos. Todos os privilégios, exibições e comandos SQL usam a terminologia 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

  • Exibições BACKUPS, BACKUP_POLICIES e BACKUP_SETS em uso da conta, uso da organização e Information Schema

  • Privilégios APPLY BACKUP POLICY, APPLY BACKUP RETENTION LOCK

Os nomes SNAPSHOT/SNAPSHOTS antigos ainda estão presentes, mas ficaram obsoletos em favor dos equivalentes BACKUP/BACKUPS. Por exemplo:

  • CREATE SNAPSHOT POLICY está obsoleto. Em vez dele, use CREATE BACKUP POLICY.

  • A exibição SNAPSHOTS está obsoleta. Em vez dela, use a exibição BACKUPS.

  • O privilégio APPLY SNAPSHOT POLICY está obsoleto. Em vez dele, use APPLY BACKUP POLICY.

Os comandos, exibições e privilégios obsoletos continuam funcionando, mas o Snowflake pretende removê-los em uma versão futura.