Pular para o conteúdo
Lucas Lessa
Voltar para as notícias
SnowflakeGAImpacto: Alto

Modo somente leitura para failover groups simplifica testes de DR no Snowflake

O Snowflake liberou o modo somente leitura para failover groups primários, pausando novas gravações atomicamente para garantir zero perda de dados em migrações e testes de DR.

O que mudou

O modo somente leitura para grupos de failover primários agora está em disponibilidade geral (GA). O recurso permite congelar gravações no grupo primário com um único comando, facilitando testes de recuperação de desastres (DR) e migrações de conta sem risco de perda de dados.

Para que serve

Imagine que você precisa rodar um teste programado de disaster recovery ou migrar uma conta sem perder nenhuma transação. Antes, era necessário desabilitar usuários, revogar permissões ou suspender pipes e tasks manualmente para evitar novas alterações antes do último refresh de replicação.

Com o modo somente leitura em failover groups primários, você consegue:

  • Bloquear atomicamente comandos DDL e DML novos nos objetos pertencentes ao grupo de failover.
  • Pausar automaticamente o agendamento de tasks, alertas e a ingestão de pipes (Snowpipe) vinculados aos bancos do grupo.
  • Manter consultas analíticas de leitura (SELECT, SHOW, DESCRIBE) em funcionamento na origem.
  • Reverter o congelamento a qualquer momento sem precisar executar um failover completo.

Como usar

A sintaxe principal para ativar e desativar o modo de leitura é executada no grupo de failover da conta primária:

-- Ativa o modo somente leitura no primário
ALTER FAILOVER GROUP meu_fg SET READ_ONLY = TRUE;

-- Restaura o modo normal de leitura e escrita (se não for fazer failover)
ALTER FAILOVER GROUP meu_fg UNSET READ_ONLY;

Em um cenário completo de teste de DR ou migração, o fluxo padrão envolve pausar as gravações, encerrar consultas em andamento, sincronizar e promover o secundário:

-- 1. Na conta de origem (primária): congela as gravações
ALTER FAILOVER GROUP meu_fg SET READ_ONLY = TRUE;

-- 2. Na conta de origem: cancela consultas ativas nos bancos do grupo
SHOW DATABASES IN FAILOVER GROUP meu_fg;

SELECT SYSTEM$CANCEL_QUERY(q.query_id)
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY()) q
WHERE q.execution_status = 'RUNNING'
  AND q.database_name IN (SELECT "name" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())));

-- 3. Na conta de destino: executa o refresh final a partir da origem estática
ALTER FAILOVER GROUP meu_fg REFRESH;

-- 4. Na conta de destino: promove conexão e grupo para se tornarem o novo primário
ALTER CONNECTION minha_conexao PRIMARY;
ALTER FAILOVER GROUP meu_fg PRIMARY;

O que acontece nesse código:

  1. O comando SET READ_ONLY = TRUE rejeita novos DDL/DML e interrompe o agendamento de tasks e pipes no grupo de failover.
  2. A consulta localiza queries ainda em execução nos bancos afetados e as cancela via SYSTEM$CANCEL_QUERY para liberar computação imediatamente.
  3. O comando REFRESH na conta de destino copia as últimas alterações do primário sem risco de novas modificações concorrentes.
  4. A promoção transfere o tráfego do cliente e transforma a réplica de destino no novo primário de leitura e escrita. Na conta de origem, o grupo vira réplica secundária padrão e a flag de leitura é limpa automaticamente.

O que retorna

A visualização do estado do failover group exibe o status de congelamento através dos comandos de monitoramento:

CampoDescrição
read_onlyRetorna TRUE se o failover group primário estiver em modo somente leitura; FALSE em operação normal.

Essa coluna fica visível tanto na conta primária quanto na secundária via SHOW FAILOVER GROUPS ou SHOW REPLICATION GROUPS.

Limitações e requisitos

  • Estágio: Disponibilidade geral (GA).
  • Privilégios: O usuário precisa da role com OWNERSHIP ou privilégio FAILOVER sobre o failover group.
  • Transações ativas: Consultas que já estavam rodando antes do congelamento não são canceladas automaticamente pelo Snowflake; elas falham apenas na hora do commit se tentarem gravar. Use SYSTEM$CANCEL_QUERY ou SYSTEM$ABORT_SESSION se precisar encerrá-las de imediato.
  • Dynamic Tables: O agendamento de dynamic tables não é suprimido automaticamente. O Snowflake tenta o refresh até cinco vezes e, após sucessivas falhas pela trava de escrita, suspende o agendamento. Se desativar o modo somente leitura (UNSET READ_ONLY), será necessário reativar as dynamic tables manualmente.
  • Restrições de alteração: Não é permitido adicionar ou remover bancos e shares (ADD ou REMOVE) no grupo enquanto ele estiver em modo somente leitura.
Ver nota oficial do Snowflake

Quiesce a primary failover group (General availability)

Resumo e explicação gerados por IA a partir da release note oficial. Em caso de dúvida, a documentação oficial da plataforma prevalece.

Relacionadas