Caiu ou Não?Pesquisar serviço
PT
APIs e infraestrutura

Banco Cloudflare D1 apagado: como recuperar em até 7 dias

O D1 aceita undelete apenas nos sete dias após a exclusão. Veja o pedido correto, o limite do Time Travel e como validar a recuperação sem expor credenciais.

Computador exibindo a recuperação de um banco Cloudflare D1 apagado dentro da janela de sete dias

Resposta rápida

Se um banco Cloudflare D1 foi apagado, envie imediatamente uma requisição POST para /accounts/ACCOUNT_ID/d1/database/DATABASE_ID/undelete usando o UUID original do banco e um API Token com o menor escopo necessário. Desde 23 de outubro de 2026, a API só aceita bancos excluídos nas últimas 168 horas, equivalentes a sete dias. Depois desse prazo, o pedido falha.

Não use Time Travel para tentar trazer de volta um banco que já foi excluído. Primeiro faça o undelete. Se o nome original já pertence a outro banco, envie new_name no corpo da requisição. Após recuperar, confirme o banco, as tabelas, uma amostra de dados e todos os bindings antes de reabrir gravações da aplicação.

Primeiro confirme o que foi apagado

Separe exclusão do banco de uma exclusão de linhas. Se o banco ainda aparece no painel e a aplicação perdeu registros por DELETE, UPDATE, migração ou importação incorreta, o caminho aplicável é Time Travel. Se o banco inteiro desapareceu após uma operação de exclusão, use o endpoint de undelete.

Registre o horário aproximado, o account ID, o UUID do banco, o nome anterior e os ambientes que apontavam para ele. O UUID é indispensável. Procure-o no wrangler.toml ou wrangler.jsonc, em configurações de deploy, inventários, logs de auditoria e registros de infraestrutura. Não crie imediatamente outro banco com o mesmo nome sem preservar essas evidências.

  • Pause deploys, migrações, jobs e gravações que possam aumentar a inconsistência.
  • Confirme se o banco sumiu ou se apenas os dados mudaram.
  • Recupere o database_id original sem publicar tokens, dumps ou conteúdo sensível.
  • Calcule o prazo a partir do momento real da exclusão e não espere o sétimo dia.
  • Consulte o Cloudflare Status para separar incidente amplo de uma exclusão administrativa.

Como enviar o pedido de undelete

A documentação oficial expõe o endpoint POST /accounts/{account_id}/d1/database/{database_id}/undelete. Prefira um API Token ao Global API key, use HTTPS e evite salvar o segredo em histórico, ticket ou log. A resposta devolve os detalhes do banco restaurado; registre o resultado sem registrar o cabeçalho Authorization.

Se não existe conflito de nome, envie um objeto JSON vazio. Se outro banco já usa o nome anterior, inclua um novo nome, por exemplo {"new_name":"restored-db"}. O banco recuperado volta a contar nos limites da conta, portanto confirme capacidade antes do pedido quando a conta estiver próxima da cota.

  • Crie ou selecione um API Token com acesso somente à conta e ao D1 necessários.
  • Envie POST para https://api.cloudflare.com/client/v4/accounts/ACCOUNT_ID/d1/database/DATABASE_ID/undelete.
  • Adicione Authorization: Bearer API_TOKEN e Content-Type: application/json nos cabeçalhos.
  • Use {} no corpo ou {"new_name":"restored-db"} quando houver conflito de nome.
  • Guarde o código HTTP, success, errors, messages e os metadados retornados, sempre sem o token.

Limite importante do Time Travel depois do undelete

Depois que o banco é recuperado, o Time Travel não consegue restaurá-lo para um bookmark ou horário anterior ou igual ao momento do undelete. Na prática, recuperar o contêiner do banco não abre acesso aos estados de Time Travel anteriores à recuperação. Essa restrição está na própria referência da API.

Time Travel continua útil para um banco que não foi excluído e sofreu uma alteração acidental. Nesse caso, obtenha um bookmark com wrangler d1 time-travel info NOME_DO_BANCO e só execute a restauração depois de confirmar o horário. O restore altera o banco existente no lugar e cancela consultas em andamento, por isso exija janela de mudança, validação e plano de recuperação.

Como validar o banco recuperado

Não considere o caso encerrado apenas porque a API respondeu success. Liste os bancos, consulte os metadados do recuperado e compare o identificador esperado. Depois faça consultas somente de leitura para verificar esquema, tabelas críticas, contagens aproximadas e alguns registros conhecidos. Não use dados pessoais em capturas ou relatórios de validação.

Revise cada binding de Worker, Pages, ambiente de preview e produção. Um nome restaurado não prova que a aplicação está apontando para o database ID correto. Reabra o tráfego em etapas e acompanhe erros de consulta, latência, filas, cron jobs e divergências de leitura antes de liberar gravações em massa.

  • Execute npx wrangler d1 list --json e localize o banco recuperado.
  • Rode npx wrangler d1 info NOME_DO_BANCO e confirme nome, UUID e região esperados.
  • Consulte sqlite_schema e uma amostra somente de leitura das tabelas críticas.
  • Compare os bindings do projeto com o database_id retornado pela API.
  • Reative primeiro leituras e health checks; só depois retome jobs e escritas.

O que fazer se o prazo de sete dias acabou

Pedidos enviados mais de sete dias depois da exclusão são rejeitados pela API oficial. A documentação não promete exceção por plano ou intervenção de suporte. Abra um caso apenas para esclarecer o incidente, sem tratar isso como estratégia de restauração e sem adiar a reconstrução a partir de uma cópia externa já existente.

Se você possui um export SQL válido, crie um banco novo e importe o arquivo com Wrangler. Verifique antes as limitações de tamanho, tabelas virtuais, precisão numérica e chaves estrangeiras documentadas pela Cloudflare. Um export em andamento bloqueia outras requisições, portanto futuros backups também precisam de janela e monitoramento.

Como evitar que a próxima exclusão vire perda permanente

Time Travel oferece retenção de até 30 dias no Workers Paid e sete dias no Workers Free, mas não substitui uma cópia independente e não recupera o histórico anterior ao undelete. Para retenção maior, a Cloudflare documenta exportações automáticas do D1 para R2 por REST API e Workflows. Teste periodicamente a importação em um banco descartável, pois um arquivo que nunca foi restaurado é apenas uma hipótese de backup.

Restrinja a permissão de exclusão, mantenha database ID e ambiente em inventário seguro e exija confirmação humana fora dos scripts administrativos rotineiros. Não use --skip-confirmation em tarefas comuns. Registre exclusões e alterações de binding no audit log e tenha um procedimento que comece por pausar gravações, localizar o UUID e enviar undelete.

Limitações e próxima ação útil

Este guia foi verificado em 25 de outubro de 2026. O prazo de sete dias, o endpoint e a restrição de Time Travel refletem a documentação oficial disponível nesta data. Planos, limites, comandos e comportamento da API podem mudar. A página de status confirma incidentes amplos, mas não comprova a integridade do banco restaurado ou dos bindings privados.

A próxima ação é localizar agora o database ID e o horário da exclusão. Se ainda estiver dentro das 168 horas, pause gravações, envie o undelete, valide tabelas e bindings e só então reabra o tráfego. Se o prazo venceu, pare de repetir a API e inicie uma restauração controlada a partir do export externo mais recente que já exista.

Faça o próximo teste

Fontes consultadas

Os links abaixo servem para conferir conceitos, orientações oficiais e o critério editorial usado neste conteúdo.

Outros guias ligados ao mesmo tipo de problema.