DBAtlas · Атлас эксплуатации баз данных

Повреждение данных

Симптом

'ORA-01578', 'page corruption', 'checksum mismatch', 'MISCONF', ошибки целостности I/O при чтении.

1. Сохраняйте спокойствие и остановите распространение

Паническое вмешательство усугубляет ситуацию. Сначала определите масштаб и, если возможно, остановите запись в затронутый объект. Если проблема аппаратная (диск/контроллер), проверьте также журналы ОС/оборудования — исправление БД не исправит диск.

2. Определите масштаб: сколько повреждено

Это один блок/страница/объект или повреждение обширное? Запустите проверку целостности.

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. Приоритет: восстановление из бэкапа

При повреждении самый безопасный путь — восстановление из исправного бэкапа. Если поддерживается восстановление на уровне блока/страницы, восстановите только повреждённую часть (Oracle RMAN BLOCKRECOVER, MSSQL page restore). Инструменты исправления (DBCC REPAIR_ALLOW_DATA_LOSS, innodb_force_recovery) ПРИВОДЯТ К ПОТЕРЕ ДАННЫХ — это крайняя мера.

4. Проверьте целостность

После восстановления повторите проверку (DBCC CHECKDB / RMAN VALIDATE / CHECK TABLE) и убедитесь, что ошибок нет. Также проверьте согласованность данных на стороне приложения (число строк, критичные итоги).

5. Первопричина: обычно оборудование

Повреждение обычно вызвано сбоем диска/памяти/контроллера. Протестируйте/замените оборудование, включите контрольные суммы (data_checksums, PAGE_VERIFY CHECKSUM) и ужесточите процедуру бэкапа и проверки. Запланируйте регулярные DBCC CHECKDB / RMAN VALIDATE.

Открыть в DBAtlas →