---
id: db-rollback
agent: data-engineer
title: Reverter banco para um snapshot ou rodar rollback script
inputs: [snapshot (label) ou rollback script (path)]
outputs: [banco restaurado, registro do rollback]
elicit: true
modes: [interactive]
---

# Reverter banco para um snapshot ou rodar rollback script

**Objetivo:** desfazer uma mudança de schema/dados restaurando um snapshot ou aplicando o rollback
script — devolvendo o banco a um estado bom conhecido, com confirmação humana antes de qualquer
operação destrutiva.

**Pré-condições:**
- Existe o snapshot rotulado OU o rollback script correspondente à mudança a desfazer.
- O ambiente-alvo está identificado (`db-env-check` ok). Reverter no ambiente errado é dano duplo.

## Passos

1. **Identifique o alvo da reversão:** qual migration/operação está sendo desfeita, e qual o ponto de
   destino (snapshot label ou rollback script).
2. **PONTO DE ELICITAÇÃO — confirme com o humano** antes de qualquer operação destrutiva: mostre o
   ambiente, o ponto de destino e o que será perdido (dados gravados após o snapshot, por exemplo).
   **Só prossiga com confirmação explícita.** Em produção, isso é inegociável.
3. **Crie um snapshot de segurança do estado atual** antes de reverter — para poder desfazer o próprio
   rollback se for preciso. Reversibilidade vale também para a reversão.
4. **Execute a reversão** em transação: restaure o snapshot OU rode o rollback script idempotente
   (`IF EXISTS`), com `ROLLBACK` automático em caso de erro.
5. **Verifique o estado pós-rollback:** as estruturas voltaram ao esperado, constraints/FKs/RLS estão
   coerentes, e o smoke-test (`db-smoke-test`) passa no estado restaurado.
6. **Registre o rollback** (alvo, ponto de destino, ambiente, timestamp, snapshot de segurança criado)
   na trilha da story.

## Critério de pronto (DoD)

- [ ] Confirmação humana obtida antes da operação destrutiva
- [ ] Snapshot de segurança do estado atual criado antes de reverter
- [ ] Reversão executada em transação; estado pós-rollback verificado
- [ ] Smoke-test verde no estado restaurado
- [ ] Rollback registrado na trilha da story

## Falha / recuperação

- **A reversão falha no meio** → a transação faz `ROLLBACK`; confirmo que o banco continua no estado
  pré-rollback e reporto. Não improviso correção destrutiva ao vivo.
- **O snapshot/script não restaura limpo** → recorro ao snapshot de segurança criado no passo 3 e
  escalo, em vez de empurrar um estado inconsistente.
- **Humano não confirma** → não executo. Rollback sem confirmação não acontece.
