Instantâneos para backups e armazenamento imutável

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

Os instantâneos representam backups discretos de objetos do 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 de instantâneos

Os seguintes casos de uso são aplicações típicas de instantâneos:

Conformidade regulatória:

Instantâneos 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.

Importante

A funcionalidade de versão preliminar pública não é certificada para nenhuma regulamentação específica. O Snowflake pretende obter a certificação de conformidade quando esse recurso estiver disponível para o público em geral.

Recuperação:

Os instantâneos ajudam as organizações a criar backups 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 instantâneos 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 fornece uma visão geral dos principais conceitos para instantâneos no Snowflake.

Instantâneo

Um instantâneo representa um backup em um determinado momento de um objeto.

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

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

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

Durante as operações diárias, você raramente interage com instantâneos individuais. Em vez disso, gerencia os conjuntos de instantâneos que os contêm. Por exemplo, você obtém uma lista de instantâneos executando o comando SHOW SNAPSHOTS IN SNAPSHOT SET. Você cria um novo instantâneo executando um comando ALTER SNAPSHOT SET.

Dica

O Snowflake usa o termo instantâneos em outros contextos, como para volumes de armazenamento em bloco ou para a quantidade de dados transferidos durante uma atualização de replicação. Quando é necessário distinguir o recurso de instantâneo de outros tipos de instantâneos, nos referimos a instantâneos WORM, que significa Write Once, Read Many (ou “grave uma vez, leia muitas”). Em particular, as instruções CREATE SNAPSHOT, ALTER SNAPSHOT, DROP SNAPSHOT, SHOW SNAPSHOTS e DESCRIBE SNAPSHOTS se aplicam a outros tipos de instantâneos.

Conjunto de instantâneos

Um conjunto de instantâneos é um objeto em nível de esquema que contém um conjunto de instantâneos para um banco de dados, tabela ou esquema específico. O Snowflake tem comandos SQL para os conjuntos de instantâneos CREATE, ALTER, DROP, SHOW e DESCRIBE.

Você pode ter vários conjuntos de instantâneos para o mesmo objeto. O número de conjuntos de instantâneos para o mesmo objeto é limitado durante a versão preliminar pública. Para obter mais informações, consulte Limitações dos instantâneos durante o período de versão preliminar pública.

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

Política de instantâneo

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

  • O agendamento determina quando os instantâneos são criados. Ele pode ser definido como um intervalo em minutos ou como uma expressão cron. Por exemplo, se o agendamento for definido para uma hora, um instantâneo do objeto será obtido a cada 60 minutos.

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

    Dica

    Se o conjunto de instantâneos não tiver um bloqueio de retenção e o instantâneo específico não tiver uma retenção legal aplicada, você poderá excluir o instantâneo manualmente antes do fim do período de expiração. É possível excluir manualmente um instantâneo de cada vez, sempre começando pelo mais antigo que não tem retenção legal.

Cada política de instantâneo deve ter pelo menos uma destas propriedades: de agendamento e de período de expiração. Por exemplo, você pode criar uma política com agendamento e período de expiração e deixar que o Snowflake cuide de toda a criação e remoção de instantâneos em todos os conjuntos em que essa política é aplicada. Como alternativa, você pode criar uma política com um agendamento e sem período de expiração se quer gerenciar a remoção de instantâneos mais antigos por conta própria. Ou pode criar uma política com um período de expiração, mas sem agendamento, e então gerenciar a criação de instantâneos 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 instantâneo a um conjunto de instantâneos, poderá fazer isso ao criar o conjunto ou aplicar a política posteriormente. Ou você pode ter um conjunto de instantâneos que não tenha uma política de instantâneo associada. Nesse caso, você controla manualmente quando criar novos instantâneos e expirar os antigos.

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

Bloqueio de retenção

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

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

  • Não é possível diminuir o período de expiração do instantâneo, embora seja possível aumentá-lo.

  • Não é possível remover um conjunto de instantâneos se há instantâneos não expirados no conjunto.

  • Não é possível remover um esquema que contenha um conjunto de instantâneos com instantâneos não expirados.

  • Não é possível remover um banco de dados que contenha um conjunto de instantâneos com instantâneos não expirados.

  • Não é possível remover uma conta que contenha um banco de dados com um conjunto de instantâneos com instantâneos não expirados.

Importante

Aplicar uma política de instantâneo com um bloqueio de retenção a um conjunto de instantâneos é irreversível. Devido às fortes garantias necessárias para a conformidade regulatória, após aplicar um bloqueio de retenção a um conjunto de instantâneos, não é possível revogá-lo. O suporte Snowflake também não consegue revogar esse bloqueio de retenção. Planeje com cuidado antes de definir um bloqueio de retenção em um conjunto de instantâneos com um longo período de expiração, para evitar cobranças inesperadas de armazenamento para conjuntos de instantâneos 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 instantâneos, 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 instantâneo

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

Conceitos-chave dos instantâneos

Como os instantâneos funcionam

Instantâneos são backups de cópia zero de um objeto Snowflake, semelhantes a clones. Os instantâneos não fazem cópias dos dados da tabela quando são criados. O mecanismo do instantâneo faz backup dos dados da tabela, eliminando o custo e o tempo extras que uma cópia de dados exigiria.

O Snowflake armazena dados em arquivos imutáveis ​​e mantém ponteiros dos instantâneos 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 instantâneo não expirado que faça referência a esse arquivo.

Restrições para instantâneos

O Snowflake impõe as seguintes restrições para instantâneos:

  • Você não pode modificar o bloqueio de retenção de uma política de instantâneo.

  • 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 de agendamento para instantâneos agendados é de uma hora (60 minutos).

Limitações dos instantâneos durante o período de versão preliminar pública

As seguintes limitações poderão mudar quando o recurso de instantâneos estiver disponível ao público em geral:

  • Ao configurar um agendamento regular para instantâneos, o Snowflake impõe um período de retenção máximo com base na frequência dos instantâneos agendados. Em uma política de instantâneo, a propriedade EXPIRE_AFTER_DAYS é limitada com base na propriedade SCHEDULE associada, da seguinte forma:

    • Políticas de instantâneo com frequência de 60 a 119 minutos têm um valor máximo de EXPIRE_AFTER_DAYS de 90.

    • As políticas de instantâneo com frequência de 120 minutos a 23 horas e 59 minutos têm um valor máximo de EXPIRE_AFTER_DAYS de 180.

    • As políticas de instantâneo com frequência de 24 horas ou mais têm um valor máximo de EXPIRE_AFTER_DAYS de 366.

    • As políticas de instantâneo sem agendamento têm um valor máximo de EXPIRE_AFTER_DAYS de 3653.

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

  • Após a aplicação de uma política de instantâneo a um conjunto de instantâneos, não é possível removê-la desse conjunto.

Comparação de instantâneos com outros recursos de recuperação de desastres e continuidade de negócios

Os instantâneos oferecem as seguintes vantagens, que são diferentes de outros recursos de continuidade de negócios e recuperação de desastres, como replicação e Time Travel:

  • Você pode habilitar a retenção de longo prazo para instantâneos. 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 instantâneos não possam ser excluídos por nenhum usuário, incluindo administradores de conta.

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

  • Você pode criar e restaurar instantâneos de objetos de tabela individuais ou objetos de contêiner, como esquemas ou bancos de dados inteiros.

  • Você pode evitar que o tempo de retenção dos backups seja reduzido após a realização do backup usando uma política de instantâneo que inclua um 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 instantâneos 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 instantâneos do mesmo objeto são agrupados em conjuntos de instantâneos torna o gerenciamento mais simples do que se você usasse clones para implementar seu 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 instantâneos não podem ser modificados após a criação.

  • Cada instantâneo representa uma única tabela, esquema ou banco de dados a partir do momento especificado. Os instantâneos não incluem objetos em nível de 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 em instantâneos de esquema e banco de dados. Para obter mais informações, consulte Objetos de instantâneo.

  • Objetos relacionados a instantâneos são armazenados na mesma região do provedor de serviços de nuvem (CSP) que o banco de dados, esquema ou tabela associado. Para cenários de continuidade de negócios e recuperação de desastres, normalmente você combina instantâneos com a replicação de contas Snowflake. Dessa forma, todos os conjuntos e políticas de instantâneos podem ser replicados para uma região diferente ou para 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 instantâneos 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 instantâneo

Você pode criar conjuntos de instantâneos para tabelas, esquemas e bancos de dados.

Referências de tabelas a outros objetos

Objetos, como visualizações ou funções, podem se referir a objetos fora do esquema ou banco de dados no instantâneo. Para garantir que essas referências continuem funcionando após a restauração a partir de um instantâneo, use uma das seguintes 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 instantâneos para todo o esquema ou banco de dados. Dessa forma, o Snowflake restaura todos os objetos interconectados de uma só vez quando você restaura a partir do instantâneo.

  • Se os objetos em um conjunto de instantâneos fizerem referência a objetos que não estão incluídos no conjunto de instantâneos, esteja ciente de que, quando um instantâneo é restaurado, as referências dos objetos restaurados apontam para os objetos originais do outro banco de dados ou esquema. Se você removeu esses outros objetos ou alterou as propriedades deles após obter o instantâneo, poderá 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 em nível de conta não fazem parte de nenhum instantâneo. Por exemplo, um instantâneo 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 instantâneo.

Tipos de objetos em instantâneos de banco de dados e esquema

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

Objeto

Incluído no instantâneo

Notas

Tabelas permanentes

Sim

As informações de Time Travel para tabelas não são armazenadas como parte de um instantâneo.

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 instantâneos.

Tabelas dinâmicas

Sim

As tabelas dinâmicas têm sua própria sintaxe de linguagem de definição de dados (DDL) para instantâneos. Você pode executar os comandos CREATE SNAPSHOT SET FOR DYNAMIC TABLE e CREATE DYNAMIC TABLE FROM SNAPSHOT SET. Ao restaurar uma tabela dinâmica a partir de um instantâneo, o Snowflake inicializa automaticamente a nova tabela durante a 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 funções de tabela escalares UDFs quanto as definidas pelo usuário (UDTFs) estão incluídas no instantâneo. As UDFs de Java em instantâneos tem os mesmos requisitos que em Limitações da clonagem.

Fluxos

Não

Tarefas

Sim

As tarefas estão incluídas no instantâneo. As tarefas restauradas de um instantâneo 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 esquema ou instantâneo 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 instantâneo tiver qualquer outro tipo de política aplicada, por exemplo, uma política de agregação ou de projeção, a criação do instantâneo 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 instantâneo 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 instantâneos deles

Quando você cria um conjunto de instantâneos para um banco de dados, esquema ou tabela, o Snowflake associa o conjunto de instantâneos ao ID interno desse banco de dados, esquema ou tabela. Se você excluir o objeto original, não poderá adicionar mais instantâneos a esse conjunto. Esse comportamento se aplica mesmo se você recria um objeto com o mesmo nome ou o substitui por um restaurado de um instantâneo.

Se, em vez disso, você renomear o objeto original, poderá continuar fazendo mais backups dele adicionando mais instantâneos ao mesmo conjunto. Nesse caso, a saída de SHOW SNAPSHOT SETS será alterada para refletir o valor OBJECT_NAME do objeto renomeado.

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

Ao restaurar uma tabela a partir de um instantâneo, ela começa com um nome diferente do original. Suponha que você queira substituir completamente o conteúdo da tabela original pelos dados do instantâneo e continuar a usar o mesmo conjunto de instantâneos 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.

Instantâneos e criptografia

Os dados dentro dos conjuntos de instantâneos são protegidos pela mesma criptografia de ponta a ponta que outros objetos e dados de tabela 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 dentro dos instantâneos.

Instantâneos e linhagem de dados

O Snowflake não preserva metadados de linhagem de dados com instantâneos de banco de dados, esquema e tabela. Após restaurar um objeto de um instantâneo, você não poderá usar Snowsight para visualizar informações de linhagem dos dados restaurados.

Custo dos instantâneos

A tabela a seguir descreve as cobranças pelos instantâneos.

Componente de custo

Descrição

Cobrado durante a versão preliminar pública

Computação de instantâneos

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

Sim

Computação de restaurações

Os warehouses gerenciados pelo Snowflake são utilizados ​​para restaurar objetos de instantâneos.

Sim

Armazenamento de instantâneos

Armazenamento de objetos em nuvem gerenciado pelo Snowflake para armazenar dados de instantâneos.

Cobrado por bytes retidos para instantâneos, semelhante aos bytes retidos para clones.

É possível monitorar os custos de armazenamento de instantâneos na exibição TABLE_STORAGE_METRICS, usando a coluna RETAINED_FOR_CLONE_BYTES, e na exibição SNAPSHOT_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 instantâneos.

Privilégio

Tipo de objeto

Descrição

CREATE SNAPSHOT POLICY

Esquema

Concede a capacidade de criar uma política de instantâneo em um esquema. A função que concede esse privilégio também deve ter o privilégio USAGE no esquema.

CREATE SNAPSHOT SET

Esquema

Concede a capacidade de criar um conjunto de instantâneos 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 instantâneos, também é necessário o privilégio apropriado no objeto que é o sujeito do conjunto: SELECT para um instantâneo de tabela ou USAGE para um instantâneo de esquema ou de banco de dados.

APPLY

Política de instantâneo

Concede a capacidade de aplicar uma política de instantâneo específica. Somente um usuário com a função ACCOUNTADMIN pode conceder esse privilégio.

APPLY SNAPSHOT RETENTION LOCK

Conta

Concede a capacidade de criar e aplicar políticas de instantâneos com bloqueio de retenção. Esse privilégio é concedido à função ACCOUNTADMIN e pode ser delegado.

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

  • Crie uma política de instantâneo com bloqueio de retenção.

  • Aplique uma política de instantâneo com bloqueio de retenção em um conjunto de instantâneos.

  • Crie um instantâneo, manualmente com um usuário ou automaticamente, de acordo com um agendamento, em um conjunto de instantâneos protegido por uma política com bloqueio de retenção.

APPLY LEGAL HOLD

Conta

Concede a capacidade de adicionar ou remover uma retenção legal de um instantâneo. Por padrão, a função ACCOUNTADMIN tem este privilégio.

Conceder privilégios necessários para criar políticas e conjuntos de instantâneos

Nota

  • A função usada para conceder esses privilégios deve ter o privilégio OWNERSHIP no esquema ou ter o privilégio CREATE SNAPSHOT SET ou CREATE SNAPSHOT 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 habilitar a função myrole a criar uma política de instantâneo no esquema myschema, execute a seguinte instrução:

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

Para habilitar a função myrole a criar um conjunto de instantâneos no esquema myschema, execute a seguinte instrução:

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

Conceder o privilégio APPLY em uma política de instantâneo a 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 habilitar a função myrole a aplicar a política de instantâneo hourly_snapshot_policy a um conjunto de instantâneos, execute a seguinte instrução:

GRANT APPLY ON SNAPSHOT POLICY hourly_snapshot_policy TO ROLE myrole;
Copy

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

Você pode conceder a uma função o privilégio de aplicar políticas de instantâneo com bloqueio de retenção em conjuntos de instantâneos.

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

Importante

Aplicar uma política de instantâneo com um bloqueio de retenção a um conjunto de instantâneos é irreversível. Devido às fortes garantias necessárias para a conformidade regulatória, após aplicar um bloqueio de retenção a um conjunto de instantâneos, não é possível revogá-lo. O suporte Snowflake também não consegue revogar esse bloqueio de retenção. Instantâneos criados com um 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 instantâneos, incluindo aqueles com bloqueios de retenção.

Para habilitar a função retention_lock_admin_role a aplicar uma política de instantâneo com bloqueio de retenção em um conjunto de instantâneos, execute a seguinte instrução:

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

Criar e configurar instantâneos

Esta seção fornece exemplos de fluxos de trabalho para criar e restaurar instantâneos.

Criar instantâneos agendados

Crie um conjunto de instantâneos que cria instantâneos automaticamente de acordo com um agendamento.

  1. Crie uma política de instantâneo usando o comando CREATE SNAPSHOT POLICY. Por exemplo, a política a seguir cria um instantâneo a cada hora, a partir da criação do conjunto de instantâneos. Cada instantâneo expira após 90 dias.

    CREATE SNAPSHOT POLICY hourly_snapshot_policy
      SCHEDULE = '60 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'Hourly backups expire after 90 days';
    
    Copy
  2. Crie um conjunto de instantâneos para a tabela t1 com a política de instantâneo hourly_snapshot_policy:

    CREATE SNAPSHOT SET t1_snapshots
      FOR TABLE t1
      WITH SNAPSHOT POLICY hourly_snapshot_policy;
    
    Copy
  3. Crie um conjunto de instantâneos para o esquema s1 com a política de instantâneo hourly_snapshot_policy:

    CREATE SNAPSHOT SET s1_snapshots
      FOR SCHEMA s1
      WITH SNAPSHOT POLICY hourly_snapshot_policy;
    
    Copy
  4. Crie um conjunto de instantâneos para o banco de dados d1 com a política de instantâneo hourly_snapshot_policy:

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

Criar instantâneos agendados com bloqueio de retenção

Crie um conjunto de instantâneos que cria instantâneos automaticamente com um bloqueio de retenção de acordo com um agendamento. O bloqueio de retenção impede que qualquer pessoa, até mesmo usuários privilegiados, exclua ou modifique instantâneos em qualquer conjunto de instantâneos ao qual a política esteja anexada.

Somente uma função que tenha o privilégio APPLY SNAPSHOT RETENTION LOCK na conta pode criar uma política de instantâneo com um bloqueio de retenção.

Importante

Aplicar uma política de instantâneo com um bloqueio de retenção a um conjunto de instantâneos é irreversível. Devido às fortes garantias necessárias para a conformidade regulatória, após aplicar um bloqueio de retenção a um conjunto de instantâneos, não é possível revogá-lo. O suporte Snowflake também não consegue revogar esse bloqueio de retenção. Instantâneos criados com um 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 instantâneos, incluindo aqueles com bloqueios de retenção.

  1. Crie uma política com um bloqueio de retenção que crie um instantâneo diário com um período de expiração de 90 dias:

    CREATE SNAPSHOT POLICY daily_snapshot_policy_with_lock
      WITH RETENTION LOCK
      SCHEDULE = '1440 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'regulatory backups: they have a retention lock and expire after 90 days';
    
    Copy
  2. Crie um conjunto de instantâneos para a tabela t2 com a política de instantâneo daily_snapshot_policy_with_lock:

    CREATE SNAPSHOT SET t2_snapshots
      FOR TABLE t2
      WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
    
    Copy
  3. Crie um conjunto de instantâneos para o esquema s2 com a política de instantâneo daily_snapshot_policy_with_lock:

    CREATE SNAPSHOT SET s2_snapshots
      FOR SCHEMA s2
      WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
    
    Copy
  4. Crie um conjunto de instantâneos para o banco de dados d2 com a política de instantâneo daily_snapshot_policy_with_lock:

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

Criar instantâneos manualmente

Você pode adicionar manualmente um instantâneo a um conjunto de instantâneos a qualquer momento. Isso cria um instantâneo do banco de dados, esquema ou tabela associado ao conjunto de instantâneos. Você pode criar instantâneos manualmente, independentemente de o conjunto de instantâneos também ter instantâneos agendados por uma política de instantâneo. Se houver uma política de instantâneo associada ao conjunto de instantâneos e ela definir um período de expiração, esse período também se aplicará ao instantâneo manual.

O exemplo a seguir cria um conjunto de instantâneos de tabela t1_snapshots e adiciona o primeiro instantâneo a ele:

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

O exemplo a seguir cria uma política de instantâneo com backups por hora, um conjunto de instantâneos de tabela t2_snapshots que usa a política e, em seguida, adiciona um instantâneo manual ao conjunto de instantâneos:

CREATE SNAPSHOT POLICY hourly_snapshot_policy
  SCHEDULE = '60 MINUTE'
  EXPIRE_AFTER_DAYS = 7;

CREATE SNAPSHOT SET t2_snapshots FOR TABLE t2 WITH SNAPSHOT POLICY hourly_snapshot_policy;
-- Wait several hours. Then the snapshot set already contains several scheduled snapshots.
-- You can manually add a snapshot at any time, in addition to the scheduled snapshots.
ALTER SNAPSHOT SET t2_snapshots ADD SNAPSHOT;
Copy

Você pode executar comandos semelhantes para adicionar um instantâneo a um esquema ou conjunto de instantâneos de banco de dados. Substitua o nome do esquema ou conjunto de instantâneos de banco de dados no comando ALTER SNAPSHOT SET.

Suspender uma política de instantâneo em um conjunto de instantâneos

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

O exemplo a seguir suspende uma política de instantâneo no conjunto de instantâneos t2_snapshots:

ALTER SNAPSHOT SET t2_snapshots SUSPEND SNAPSHOT POLICY;
Copy

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

Retomar uma política de instantâneo em um conjunto de instantâneos

Você pode retomar políticas de instantâneos suspensas. Isso retoma a criação e a expiração de instantâneos de acordo com a política. Se algum instantâneo atingir o tempo de expiração enquanto a política estava suspensa, o Snowflake excluirá esse instantâneo assim que a política for retomada.

O exemplo a seguir retoma uma política de instantâneo no conjunto de instantâneos t1_snapshot:

ALTER SNAPSHOT SET t1_snapshots
  RESUME SNAPSHOT POLICY;
Copy

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

Restaurar um instantâneo

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

  1. Encontre o ID do instantâneo da tabela a ser restaurado na coluna snapshot_id:

    SHOW SNAPSHOTS IN SNAPSHOT SET t1_snapshots ->> SELECT "created_on", "snapshot_id", "expire_on" FROM $1;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | snapshot_id                          | expire_on                     |
    |-------------------------------+------------------------------------------+---------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 983e0b66-91eb-41cb-8a0b-037abfec1914 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | b5624ef0-1f35-452f-b132-09d8f0592e52 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | eca1a94a-fd40-46db-a2bc-4afba6a38c0a | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | d38caf14-f8a5-4ba8-a248-8287e0cdcf40 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-----------+-------------------+
    
  2. Encontre o ID do instantâneo do esquema a ser restaurado na coluna snapshot_id:

    SHOW SNAPSHOTS IN SNAPSHOT SET s1_snapshots;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | snapshot_id                          | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 0a0382e1-d265-46e9-b152-4c3b2b859e65 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 8dbcf919-3393-4590-928f-5481d7f2502f | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | bd729a79-01bc-444d-a550-adaaa31ab62f | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 9a8802c5-5fbd-4200-a09d-43e046103939 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  3. Encontre o ID do instantâneo do banco de dados a ser restaurado na coluna snapshot_id:

    SHOW SNAPSHOTS IN SNAPSHOT SET d1_snapshots;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | snapshot_id                          | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 42435925-4e77-4b01-ba89-8163ac03e12f | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 29c2c1b9-6599-4f0b-87b8-d43377fd7c77 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | a4283984-a063-4415-acc4-0e3c19259fad | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | ffe25397-64b9-4c5f-b061-23a1885dc2dc | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. Restaure o instantâneo da tabela t1 obtido em 19/08/2024 às 18:12:33:

    CREATE TABLE restored_t1 FROM SNAPSHOT SET t1_snapshots IDENTIFIER 'b5624ef0-1f35-452f-b132-09d8f0592e52';
    
    Copy
  5. Restaure o instantâneo do esquema s1 obtido em 19/08/2024 às 18:12:33:

    CREATE SCHEMA restored_s1 FROM SNAPSHOT SET s1_snapshots IDENTIFIER '8dbcf919-3393-4590-928f-5481d7f2502f';
    
    Copy
  6. Restaure o instantâneo do banco de dados d1 obtido em 19/08/2024 às 18:12:33:

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

Excluir um instantâneo de um conjunto de instantâneos

Para qualquer conjunto de instantâneos, você só pode excluir o instantâneo mais antigo que não tenha uma retenção legal. Você faz isso especificando o ID do instantâneo. Você pode encontrar os instantâneos que não têm retenção legal examinando a propriedade is_under_legal_hold. Você pode encontrar o instantâneo mais antigo examinando a propriedade created_on.

Nota

Você não poderá excluir nenhum instantâneo de um conjunto se uma política de instantâneo com bloqueio de retenção estiver anexada a esse conjunto ou se esse instantâneo específico tiver uma retenção legal aplicada.

O instantâneo que você excluir do conjunto de instantâneos deve ser o mais antigo do conjunto.

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

    SHOW SNAPSHOTS IN SNAPSHOT SET t1_snapshots ->>
      SELECT "created_on", "snapshot_id", "expire_on" FROM $1
        WHERE "is_under_legal_hold" = 'N'
        ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | snapshot_id                          | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 983e0b66-91eb-41cb-8a0b-037abfec1914 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | b5624ef0-1f35-452f-b132-09d8f0592e52 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | eca1a94a-fd40-46db-a2bc-4afba6a38c0a | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | d38caf14-f8a5-4ba8-a248-8287e0cdcf40 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  2. Exclua o instantâneo t1_snapshots criado em 19/08/2024 às 17:12:28 usando o snapshot_id:

    ALTER SNAPSHOT SET t1_snapshots DELETE SNAPSHOT IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
    
    Copy
  3. Encontre o ID do instantâneo do esquema a ser excluído na coluna snapshot_id na seguinte saída:

    SHOW SNAPSHOTS IN SNAPSHOT SET s1_snapshots ->>
      SELECT "created_on", "snapshot_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | snapshot_id                          | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 46a1e22a-8557-432f-a14c-1261a4ca2b34 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 3e42fef6-b895-4055-a59f-179744d015d3 | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 7807d24e-285e-4741-b332-87c32bad5cb6 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | e022e619-ee83-45a0-b2b7-9007e284bdb3 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. Exclua o instantâneo s1_snapshots criado em 19/08/2024 às 17:12:28 usando o snapshot_id:

    ALTER SNAPSHOT SET s1_snapshots DELETE SNAPSHOT IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
    
    Copy
  5. Encontre o ID do instantâneo do banco de dados a ser excluído na coluna snapshot_id na seguinte saída:

    SHOW SNAPSHOTS IN SNAPSHOT SET d1_snapshots ->>
      SELECT "created_on", "snapshot_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | snapshot_id                          | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | d3a77432-c98d-4969-91a9-fffae5dd655c | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 0a0382e1-d265-46e9-b152-4c3b2b859e65 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 25e01ee0-ea9d-4bb7-af7f-f3fe87f9409e | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | a12294f5-fc63-49cf-84f1-c7b72f7664af | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  6. Exclua o instantâneo d1_snapshots criado em 19/08/2024 às 17:12:28 usando o snapshot_id:

    ALTER SNAPSHOT SET d1_snapshots DELETE SNAPSHOT IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
    
    Copy
  7. Tente excluir um instantâneo d1_snapshots mais recente criado em 19/08/2024 às 21:12:55. Observe como o Snowflake impede que você exclua um instantâneo diferente do mais antigo no conjunto de instantâneos.

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

Excluir um conjunto de instantâneos

Você pode excluir um conjunto de instantâneos usando o comando DROP SNAPSHOT SET.

Nota

Não é possível excluir um conjunto de instantâneos que tenha um bloqueio de retenção e contenha instantâneos não expirados. Você também não poderá excluir um conjunto de instantâneos se algum dos instantâneos dele tiver uma retenção legal.

Exclua o conjunto de instantâneos t1_snapshots:

DROP SNAPSHOT SET t1_snapshots;
Copy

Exclua o conjunto de instantâneos s1_snapshots:

DROP SNAPSHOT SET s1_snapshots;
Copy

Exclua o conjunto de instantâneos d1_snapshots:

DROP SNAPSHOT SET d1_snapshots;
Copy

Encontrar todos os conjuntos de instantâneos que contêm backups de uma tabela específica

O exemplo a seguir mostra como encontrar todos os conjuntos de instantâneos que contêm uma tabela específica dentro de um esquema e banco de dados específicos. 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 SNAPSHOT SETS é filtrada para mostrar os conjuntos de instantâneos que fazem backup do banco de dados que contém a tabela ou do esquema que contém a tabela, ou então que contêm essa única tabela.

A saída filtrada de SHOW SNAPSHOT SETS mostra que há dois conjuntos de instantâneos para o banco de dados MY_BIG_IMPORTANT_DATABASE, um conjunto de instantâneos para o esquema MY_BIG_IMPORTANT_DATABASE.PUBLIC e um conjunto de instantâneos 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 SNAPSHOT SETS ->> SELECT "object_kind", "name", "database_name", "schema_name", "object_name" FROM $1
  WHERE ("object_kind" = 'TABLE' AND "database_name" = $dname AND "schema_name" = $sname AND "object_name" = $tname)
    OR ("object_kind" = 'SCHEMA' AND "database_name" = $dname AND "object_name" = $sname)
    OR ("object_kind" = 'DATABASE' AND "object_name" = $dname);
Copy
+-------------+------------------+---------------------------+-------------+---------------------------+
| object_kind | name             | database_name             | schema_name | object_name               |
|-------------+------------------+---------------------------+-------------+---------------------------|
| DATABASE    | DATABASE_BACKUP  | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | MY_BIG_IMPORTANT_DATABASE |
| DATABASE    | DATABASE_BACKUP2 | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | MY_BIG_IMPORTANT_DATABASE |
| SCHEMA      | SCHEMA_BACKUP3   | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | PUBLIC                    |
| TABLE       | TABLE_BACKUP2    | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | MY_SMALL_SECONDARY_TABLE  |
+-------------+------------------+---------------------------+-------------+---------------------------+

Criar um instantâneo para uma tabela com dependências

Os exemplos a seguir mostram como você pode criar um instantâneo para uma tabela que se refere a uma sequência e a 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 instantâneos para a tabela e adicionamos um instantâneo a ele:

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

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

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

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

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

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

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

SELECT * FROM restored_dependent_table;
Copy

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.

Criar um instantâneo para uma tabela dinâmica

Uma tabela dinâmica sempre envolve uma referência a alguma outra tabela. Por esse motivo, você pode preferir usar instantâneos de esquema ou de banco de dados para tabelas dinâmicas, para que a tabela original e a dinâmica possam ser incluídas no mesmo instantâneo.

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

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

CREATE SNAPSHOT SET dynamic_table_snapshots
  FOR DYNAMIC TABLE my_dynamic_table;

ALTER SNAPSHOT SET dynamic_table_snapshots ADD SNAPSHOT;
Copy

O exemplo a seguir mostra como determinar os IDs para instantâneos criados em momentos diferentes. Nesse caso, o instantâneo mais recente é a primeira linha do conjunto de resultados. Em seguida, use o ID do instantâneo no comando CREATE DYNAMIC TABLE.

SHOW SNAPSHOTS IN SNAPSHOT SET dynamic_table_snapshots
  ->> SELECT "created_on", "snapshot_id" FROM $1
        ORDER BY "created_on" DESC;

CREATE DYNAMIC TABLE restored_dynamic_table
  FROM SNAPSHOT SET dynamic_table_snapshots
    IDENTIFIER '<snapshot_id_from_SHOW_SNAPSHOTS_output>';
Copy

Dica

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

Monitorar instantâneos e operações de instantâneos

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

Esquema de informações:

Uso da conta:

Tópicos de referência a SQL

Política de instantâneo

Conjunto de instantâneos

Instantâneos

Você não executa um comando CREATE SNAPSHOT propriamente dito. Para criar um instantâneo novo, execute ALTER SNAPSHOT SET … ADD SNAPSHOT. Ou, ao associar o conjunto de instantâneos a uma política que tem um agendamento, o Snowflake cria instantâneos automaticamente no conjunto com base no agendamento especificado. Para excluir um instantâneo mais antigo, execute ALTER SNAPSHOT SET … DELETE SNAPSHOT. Essas operações exigem que você especifique o identificador de um instantâneo específico. Você pode encontrar os identificadores de instantâneo, juntamente com outras informações, como quando cada instantâneo foi criado, usando o seguinte comando.

Restauração de objetos a partir de instantâneos

Use a sintaxe CREATE object_kind FROM SNAPSHOT SET para restaurar cada tipo de objeto a partir do tipo apropriado de conjunto de instantâneos.

Os instantâneos subsequentes no conjunto de instantâneos 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 instantâneos após uma restauração, restaure o objeto com um nome novo e transfira os dados de volta para o objeto original.

Exibições

As seguintes exibições do sistema contêm metadados relacionados a instantâneos, conjuntos de instantâneos e políticas de instantâneos.

Visualizações do esquema de informações

Estas visualizações no esquema INFORMATION_SCHEMA contêm informações sobre objetos relacionados a instantâneos que existem atualmente:

Visualizações do uso da conta

Estas visualizações no esquema ACCOUNT_USAGE contêm informações sobre objetos relacionados a instantâneos que existem ou foram descartados, as operações que foram executadas nos instantâneos e o armazenamento que eles usam: