Повреждение данных
Симптом
'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 mydbMySQL
CHECK TABLE customer; -- for InnoDB, innodb_force_recovery is the last resortSQL 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.manifest3. Приоритет: восстановление из бэкапа
При повреждении самый безопасный путь — восстановление из исправного бэкапа. Если поддерживается восстановление на уровне блока/страницы, восстановите только повреждённую часть (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.