Q: 6. Порядок действий по восстановлению поврежденных файлов БД.
A: Самый частый случай повреждения базы данных это отключение питания на сервере. Такие ситуации нужно пытаться предотвращать, используя аппаратные средства (UPS, RAID-контроллеры с батарейками). Возможны также повреждения как результат использования некачественного оборудования, конфликтов программного обеспечения и т.п. Повреждения условно можно разделить на 2 группы:
1. Некритичные. Обычно, в случае таких повреждений вполне возможна нормальная работа с такими базами. В большинстве случаев такие повреждения исправляются процедурой Бекап/Рестор. К таким ошибкам можно отнести повреждения страниц индексов, при рестрое они успешно пересоздаются и все встает на свои места.
2. Критичные, повреждения данных или метаданных. В результате начинают возникать непонятные ошибки при работе с БД вплоть до полного отказа подключения к базе. В таких случаях можно поступить следующим образом:
- скопировать оригинальный файл БД в надежное место, предварительно отключив всех пользователей от базы данных. Все нижеперечисленные работы проводить только на копии базы! Потому что почти все операции по восстановлению испорченного файла БД носят необратимый характер.
- попытаться сделать бекап/рестор базы. Если операция по резервному копированию и восстановлению прошла успешно, значит Вам очень повезло, на этом можно закончить.
3. Если бекап прошел, но восстанеовить базу не удается, то нужно поступить таким образом:
- попробовать восстановить базу без активации индексов. Большинство ошибок восстановления бекапов успешно сделанных с битых БД заключается именно в нарушении условий уникальности некоторых индексов. После того как БД отресторится можно поочередно активировать индексы (желательно каким-либо визуальным средством а-ля IBEXpert). Плохой индекс не активирутеся с соответсвующей ошибкой, по описанию которой можно будет определить где и в какой таблице искать "плохую" запись. Восстановление БД с неактивными индексами возможно с помощью команды такого вида:
gbak -c -inactive backup_file.fbk database_file.fdb -user SYSDBA -pass masterke
4. Если не удается создать бекап, то необходимо провести валидацию файла бд командой такого вида:
gfix -v -full database.fdb -user SYSDBA -pass masterkeЕсли выдаются ошибки checksum error, то нужно выполнить следующую команду
gfix -v -ignore database.fdb -user SYSDBA -pass masterkeЕсли предыдущая команда обнаружила ошибки, то нужно их исправить командой.
gfix -mend database.fdb -user SYSDBA -pass masterkeЭта операция позволяет пометить ошибочные страницы для того чтобы в дальнейшем процедура пошла в обход их.
Проверяем все ли починилось:
gfix -v -full database.fdb -user SYSDBA -pass masterkeЕсли на этот момент вы все еще видите ошибки, то надо попытаться сделать backup, при этом обязательно нужно отключать сборку мусора (ключ -g):
gbak -b -v -ig -g database.gdb database.gbk -user SYSDBA -pass masterkeключ -ig игнорирует ошибки при чтении структур данных, и пытается сохранить в backup все неповрежденные структуры и данные.
!Никогда не указывайте ключ -ig при обычном бэкапе - если в базе есть ошибки, gbak их проигнорирует и вы не узнаете, что база была повреждена. В результате такой бэкап может быть невосстановимым.