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.
Retenção legal¶
O recurso de retenção legal dos instantâneos do Snowflake impede que eles sejam substituídos ou excluídos. Dessa forma, você pode preservar bancos de dados, esquemas ou tabelas do Snowflake com base em seus próprios requisitos legais.
O Snowflake permite que você coloque uma retenção legal em instantâneos específicos. Quando um instantâneo do Snowflake está sob retenção legal, as seguintes condições se aplicam:
Ninguém pode modificar o instantâneo.
Ninguém pode excluir o instantâneo. Isso é válido mesmo que o instantâneo tenha passado do período EXPIRE_AFTER_DAYS.
O acesso ao instantâneo é registrado e auditável.
A retenção legal pode ser removida por um usuário privilegiado, diferentemente de um bloqueio de retenção.
Importante
Se você replicar um conjunto de instantâneos, execute uma atualização imediatamente após aplicar uma retenção legal a um instantâneo nesse conjunto. Se você executar um failover antes de replicar o conjunto de instantâneos que contém a retenção legal, o conjunto de instantâneos original poderá ser substituído quando você retornar à conta primária original, potencialmente apagando a retenção legal.
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.

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:
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:
|
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;
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;
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;
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;
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.
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';
Crie um conjunto de instantâneos para a tabela
t1
com a política de instantâneohourly_snapshot_policy
:CREATE SNAPSHOT SET t1_snapshots FOR TABLE t1 WITH SNAPSHOT POLICY hourly_snapshot_policy;
Crie um conjunto de instantâneos para o esquema
s1
com a política de instantâneohourly_snapshot_policy
:CREATE SNAPSHOT SET s1_snapshots FOR SCHEMA s1 WITH SNAPSHOT POLICY hourly_snapshot_policy;
Crie um conjunto de instantâneos para o banco de dados
d1
com a política de instantâneohourly_snapshot_policy
:CREATE SNAPSHOT SET d1_snapshots FOR DATABASE d1 WITH SNAPSHOT POLICY hourly_snapshot_policy;
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.
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';
Crie um conjunto de instantâneos para a tabela
t2
com a política de instantâneodaily_snapshot_policy_with_lock
:CREATE SNAPSHOT SET t2_snapshots FOR TABLE t2 WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
Crie um conjunto de instantâneos para o esquema
s2
com a política de instantâneodaily_snapshot_policy_with_lock
:CREATE SNAPSHOT SET s2_snapshots FOR SCHEMA s2 WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
Crie um conjunto de instantâneos para o banco de dados
d2
com a política de instantâneodaily_snapshot_policy_with_lock
:CREATE SNAPSHOT SET d2_snapshots FOR DATABASE d2 WITH SNAPSHOT POLICY daily_snapshot_policy_with_lock;
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;
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;
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;
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;
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:
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;
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-----------+-------------------+
Encontre o ID do instantâneo do esquema a ser restaurado na coluna
snapshot_id
:SHOW SNAPSHOTS IN SNAPSHOT SET s1_snapshots;
+-------------------------------+--------------------------------------+-------------------------------+ | created_on | snapshot_id | expire_on | |-------------------------------+--------------------------------------+-------------------------------| | 2024-08-19 17:12:28.991 -0700 | 0a0382e1-d265-46e9-b152-4c3b2b859e65 | 2024-08-20 17:12:28.991 -0700 | | 2024-08-19 18:12:33.824 -0700 | 8dbcf919-3393-4590-928f-5481d7f2502f | 2024-08-20 18:12:33.824 -0700 | | 2024-08-19 19:12:43.830 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 19:12:43.830 -0700 | | 2024-08-19 20:12:45.446 -0700 | bd729a79-01bc-444d-a550-adaaa31ab62f | 2024-08-20 20:12:45.446 -0700 | | 2024-08-19 21:12:55.305 -0700 | 9a8802c5-5fbd-4200-a09d-43e046103939 | 2024-08-20 21:12:55.305 -0700 | +-------------------------------+--------------------------------------+-------------------------------+
Encontre o ID do instantâneo do banco de dados a ser restaurado na coluna
snapshot_id
:SHOW SNAPSHOTS IN SNAPSHOT SET d1_snapshots;
+-------------------------------+--------------------------------------+-------------------------------+ | created_on | snapshot_id | expire_on | |-------------------------------+--------------------------------------+-------------------------------| | 2024-08-19 17:12:28.991 -0700 | 42435925-4e77-4b01-ba89-8163ac03e12f | 2024-08-20 17:12:28.991 -0700 | | 2024-08-19 18:12:33.824 -0700 | 29c2c1b9-6599-4f0b-87b8-d43377fd7c77 | 2024-08-20 18:12:33.824 -0700 | | 2024-08-19 19:12:43.830 -0700 | a4283984-a063-4415-acc4-0e3c19259fad | 2024-08-20 19:12:43.830 -0700 | | 2024-08-19 20:12:45.446 -0700 | ffe25397-64b9-4c5f-b061-23a1885dc2dc | 2024-08-20 20:12:45.446 -0700 | | 2024-08-19 21:12:55.305 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 21:12:55.305 -0700 | +-------------------------------+--------------------------------------+-------------------------------+
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';
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';
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';
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.
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 colunacreated_on
coloca o instantâneo mais antigo em primeiro lugar. Você pode adicionarLIMIT 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";
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
Exclua o instantâneo
t1_snapshots
criado em 19/08/2024 às 17:12:28 usando osnapshot_id
:ALTER SNAPSHOT SET t1_snapshots DELETE SNAPSHOT IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
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";
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
Exclua o instantâneo
s1_snapshots
criado em 19/08/2024 às 17:12:28 usando osnapshot_id
:ALTER SNAPSHOT SET s1_snapshots DELETE SNAPSHOT IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
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";
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
Exclua o instantâneo
d1_snapshots
criado em 19/08/2024 às 17:12:28 usando osnapshot_id
:ALTER SNAPSHOT SET d1_snapshots DELETE SNAPSHOT IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
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';
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;
Exclua o conjunto de instantâneos s1_snapshots
:
DROP SNAPSHOT SET s1_snapshots;
Exclua o conjunto de instantâneos d1_snapshots
:
DROP SNAPSHOT SET d1_snapshots;
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);
+-------------+------------------+---------------------------+-------------+---------------------------+
| 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');
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;
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');
+----------------------------------------------------+
| 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;
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');
002073 (02000): SQL compilation error:
Sequence used as a default value in table 'MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.RESTORED_DEPENDENT_TABLE'
column 'ID' was not found or could not be accessed.
DESC TABLE restored_dependent_table;
+------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name | privacy domain |
|------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------|
| ID | NUMBER(38,0) | COLUMN | N | [sequence cannot be found or accessed] | Y | N | NULL | NULL | NULL | NULL | NULL |
| FOREIGN_ID | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL | NULL |
+------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------+
INSERT INTO restored_dependent_table (foreign_id) VALUES (2);
002073 (02000): SQL compilation error:
Sequence used as a default value in table 'MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.RESTORED_DEPENDENT_TABLE'
column 'ID' was not found or could not be accessed.
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;
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>';
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.
Adicionar e remover retenções legais¶
Antes de trabalhar com retenções legais para instantâneos do Snowflake, aprenda a finalidade e os requisitos deles. Para obter mais informações, consulte Retenção legal.
Suponha que a equipe jurídica ou de conformidade da sua organização envie uma solicitação de retenção para litígio, especificando quais tipos de dados precisam ser preservados. Nesse caso, você pode seguir um processo como este:
Você trabalha com a equipe jurídica para identificar onde os dados relevantes estão armazenados e quais conjuntos de instantâneos contêm os objetos associados.
Você aplica uma retenção legal a um instantâneo a partir do período aplicável dentro de um conjunto de instantâneos. Isso desativa qualquer expiração automática para esse instantâneo. Você pode aplicar uma retenção legal a um instantâneo que o Snowflake criou automaticamente com base em um agendamento ou que você criou manualmente. A retenção legal se aplica independentemente de o conjunto de instantâneos ter ou não uma política de instantâneo, um período de expiração ou um bloqueio de retenção associado.
Você executa operações de atualização para todas as contas secundárias em que o banco de dados que contém o conjunto de instantâneos é replicado. Dessa forma, a retenção legal e o instantâneo associado são preservados em todas as operações de failover e failback.
Você usa os controles de acesso e logs do Snowflake para auditar o acesso aos dados que estão sob retenção legal.
Após a conclusão do processo judicial e a aprovação da remoção da retenção legal pela equipe jurídica, um usuário com o privilégio APPLY LEGAL HOLD libera a retenção legal. Em seguida, a automação normal para a expiração é retomada.
Este exemplo mostra a sequência de comandos SQL que você pode usar durante o ciclo de vida de uma retenção legal para um instantâneo dentro de um conjunto de instantâneos específico. Você encontra o identificador do instantâneo relevante usando o comando SHOW SNAPSHOTS IN SNAPSHOT SET e verificando a coluna "is_under_legal_hold"
para ver se uma retenção legal já está em vigor. Em seguida, você adiciona ou remove a retenção legal do instantâneo específico.
USE ROLE <role_name>; -- use a role that has the APPLY LEGAL HOLD privilege
SHOW SNAPSHOTS IN SNAPSHOT SET <snapshot_set_name>
->> SELECT * FROM $1 WHERE "is_under_legal_hold" = 'N';
ALTER SNAPSHOT SET <snapshot_set_name>
MODIFY SNAPSHOT IDENTIFIER '<snapshot_identifier>'
ADD LEGAL HOLD;
USE ROLE <role_name>; -- use a role that has the APPLY LEGAL HOLD privilege
SHOW SNAPSHOTS IN SNAPSHOT SET <snapshot_set_name>
->> SELECT * FROM $1 WHERE "is_under_legal_hold" = 'Y';
ALTER SNAPSHOT SET <snapshot_set_name>
MODIFY SNAPSHOT IDENTIFIER '<snapshot_identifier>'
REMOVE LEGAL HOLD;
Dica
Você também pode verificar a existência de retenções legais consultando a coluna "is_under_legal_hold"
nas visualizações INFORMATION_SCHEMA.SNAPSHOTS ou ACCOUNT_USAGE.SNAPSHOTS.
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: