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

Восстановление после повреждения данных

Пошаговое дерево решений при повреждении данных (ошибки контрольных сумм блоков/страниц, нечитаемые таблицы, повреждённые RDB/AOF): сначала подтвердите масштаб повреждения, затем правильно выберите между восстановлением на уровне блоков, полным восстановлением/PITR из бэкапа и инструментами исправления как крайней мерой.

Каков масштаб повреждения?

Сначала выполните проверку целостности, чтобы определить, насколько распространилось повреждение. Повреждены лишь несколько блоков/страниц, затронут один объект (таблица/индекс) или повреждение массовое? Просканируйте командами ниже, чтобы определить масштаб, затем выберите подходящую ветку.

RMAN> BACKUP VALIDATE CHECK LOGICAL DATABASE;  -- then: SELECT file#, block#, blocks, corruption_type FROM v$database_block_corruption;
  • Повреждены лишь несколько блоков / страниц
  • Затронут один объект (таблица/индекс)
  • Повреждение массовое / много объектов
  • Средства проверки не работают, БД не открывается
  • Повреждение повторяется (подозревается первопричина)

Первопричина: ограниченное повреждение блоков/страниц → точечное восстановление

Если повреждены лишь несколько блоков/страниц, восстанавливать всю базу данных не нужно. Сведите потерю данных к минимуму, восстановив из бэкапа/журналов только повреждённые части функцией восстановления на уровне блоков/страниц.

Первопричина: повреждение на уровне объектов/массовое → полное восстановление или PITR из бэкапа

Если повреждение распространилось на один или несколько объектов, самый безопасный путь — восстановление из исправного бэкапа и, по возможности, докат до момента повреждения (PITR). Так вы избежите потери данных, которую вызвали бы инструменты исправления.

Бэкапа нет / БД не открывается — переходить к крайней мере?

Инструменты исправления (REPAIR_ALLOW_DATA_LOSS, innodb_force_recovery, --fix) МОГУТ ПРИВЕСТИ К ПОТЕРЕ ДАННЫХ и нарушить ограничения целостности. Это крайняя мера, только когда нет пригодного бэкапа и базу данных нельзя открыть. Сначала убедитесь, что пригодного бэкапа действительно нет.

  • Я нашёл исправный бэкап, восстанавливаю
  • Бэкапа нет совсем, единственный вариант — инструмент исправления

Крайняя мера: инструменты исправления с риском потери данных

Эти инструменты отбрасывают повреждённые строки/страницы, чтобы базу данных можно было открыть. Используйте их, только если бэкапа нет и вы предварительно сделали копию существующих файлов. Цель: открыть ровно настолько, чтобы выгрузить данные, затем перенести их в чистую копию.

Первопричина: оборудование/инфраструктура → устраните источник и включите контрольные суммы

Если повреждение повторяется, реальная причина скорее всего в диске, контроллере, памяти (RAM) или нестабильном уровне хранения. Одного восстановления данных недостаточно: если не устранить источник, повреждение вернётся. Также включите проверку контрольных сумм/целостности для раннего обнаружения.

Открыть в DBAtlas →