ORA-01578
Bloco de dados corrompido
⚠ Pontos de atenção antes de executar
Cuidado com DBMS_REPAIR/SKIP_CORRUPT_BLOCKS: ele não conserta nada — faz o Oracle passar a IGNORAR os blocos corrompidos, de modo que as linhas contidas neles deixam de ser retornadas nas consultas (na prática, perdidas para a aplicação). Costuma ser tratado como último recurso, depois de esgotar restore e BLOCKRECOVER, e com ciência dessa perda. Antes de qualquer tentativa de reparo, o recomendável é preservar uma cópia do datafile atual e acionar o Suporte Oracle (SR).
O que significa
Corrupção física detectada num bloco (file#, block#). Normalmente hardware/storage, às vezes bug.
Ação imediata
Identifique o objeto atingido e NÃO faça shutdown em pânico — o problema é localizado.
Como diagnosticar somente leitura — seguro de executar
SELECT owner, segment_name, segment_type FROM dba_extents WHERE file_id=&FILE AND &BLOCK BETWEEN block_id AND block_id+blocks-1
- RMAN: VALIDATE DATAFILE &FILE
V$DATABASE_BLOCK_CORRUPTION.
Correção definitiva
RMAN BLOCKRECOVER (RECOVER ... BLOCK) se houver backup; se índice, rebuild (o índice é reconstruível a partir da tabela).
Como prevenir
DB_BLOCK_CHECKSUM=TYPICAL/FULL, backups com VALIDATE periódico, sanidade do storage.
Regras de ouro antes de agir
- Preserve o estado atual. Antes de qualquer reparo, copie os arquivos como estão (datafiles, controlfiles, redo) — é a sua única volta se algo der errado.
- Diagnostique antes de executar. As consultas desta página são somente leitura; rode-as primeiro e entenda o cenário antes de qualquer comando que altere o ambiente.
- Teste fora de produção sempre que possível, e tenha um plano de rollback.
- Em corrupção, recovery ou ORA-600: abra um SR no Suporte Oracle. Tentativa e erro nesses cenários costuma transformar um problema recuperável em perda de dados.