DBAtlas · Atlas de operações de banco de dados

Corrupção de dados

Sintoma

'ORA-01578', 'page corruption', 'checksum mismatch', 'MISCONF', erros de consistência de I/O durante leituras.

1. Mantenha a calma e contenha o alastramento

Uma intervenção em pânico piora as coisas. Primeiro determine o escopo e, se possível, pare as escritas no objeto afetado. Se for algo de hardware (disco/controladora), verifique também os logs do SO/hardware — consertar o banco não conserta o disco.

2. Determine o escopo: quanto está corrompido

É um único bloco/página/objeto ou algo generalizado? Execute uma verificação de integridade.

Oracle

RMAN> VALIDATE DATABASE;  -- or: SELECT * FROM v$database_block_corruption;

PostgreSQL

-- With data_checksums enabled it shows up in the logs; check indexes/heap with pg_amcheck:
-- pg_amcheck --heapallindexed -d mydb

MySQL

CHECK TABLE customer;  -- for InnoDB, innodb_force_recovery is the last resort

SQL Server

DBCC CHECKDB ('MyDB') WITH NO_INFOMSGS, ALL_ERRORMSGS;

Redis

redis-check-rdb dump.rdb
# AOF (Redis 7+ multi-part: under appendonlydir/, pass the manifest file):
redis-check-aof appendonlydir/appendonly.aof.manifest
# --fix TRUNCATES everything after the corrupted point (writes in that part are lost); back up the directory first:
# redis-check-aof --fix appendonlydir/appendonly.aof.manifest

3. Prioridade: recuperação a partir de backup

Com corrupção, o caminho mais seguro é restaurar a partir de um backup bom. Se a recuperação no nível de bloco/página for suportada, recupere apenas a parte corrompida (Oracle RMAN BLOCKRECOVER, MSSQL page restore). Ferramentas de reparo (DBCC REPAIR_ALLOW_DATA_LOSS, innodb_force_recovery) CAUSAM PERDA DE DADOS — são o último recurso.

4. Verifique a integridade

Após a recuperação, execute a verificação de novo (DBCC CHECKDB / RMAN VALIDATE / CHECK TABLE) e confirme que volta limpa. Verifique também a consistência dos dados no lado da aplicação (contagens de linhas, totais críticos).

5. Causa raiz: geralmente hardware

A corrupção geralmente vem de falha de disco/memória/controladora. Teste/substitua o hardware, ative checksums (data_checksums, PAGE_VERIFY CHECKSUM) e reforce a rotina de backup + verificação. Agende DBCC CHECKDB / RMAN VALIDATE regularmente.

Abrir no DBAtlas →