Есть такая система контроля доступа – PERCo S-20. В качестве СУБД использует Firebird. Иногда, по разным причинам, база данных повреждается. Повреждения могут быть критичными, а база – не подлежащей восстановлению, поэтому обязательно нужно делать бэкапы. Даже так – ОБЯЗАТЕЛЬНО НУЖНО!!! ДЕЛАТЬ БЭКАПЫ!!!
Тем не менее, часто, никто их не делает. Следовательно, восстанавливать неоткуда и нужно чинить. В ПО S-20 встроены средства проверки целостности БД и её восстановления. Этого бывает достаточно, но не всегда.
Можно попробовать восстановить БД утилитами самой же Firebird – gfix и gbak.
- Для начала делаем копию базы данных, чтобы, в случае чего, было с чем обратиться за помощью к кому-нибудь более знающему.
- Проверяем базу данных на повреждения
gfix -v -full -user sysdba -pass masterkey corruptdb.fdb, если ругается и ничего не хочет делать, то добавляем ещё ключ -ignore. - Пытаемся исправить ошибки в базе данных
gfix –mend -user sysdba -pass masterkey corruptdb.fdb, если опять ругается, опять добавляем -ignore. - Повторно проверяем на повреждения базу данных (см.п.3)
- Делаем резервную копию базы данных. Даже если есть ошибки. Бэкапа ведь нет и лучше спасти часть данных, чем потерять все.
gbak -b -v -ig -g -user sysdba -pass masterkey corruptdb.fdb backup.fbk - Восстанавливаем базу данных из резервной копии в новый файл
gbak -c -v -user sysdba -pass masterkey backup.fbk restoreddb.fdb
За прошедшее с написания статьи время прибегал к такому способу лечения несколько раз с неизменно положительным результатом. Возможно какие-то данные и терялись, но внешне это никак не проявлялось. Система становилась работоспособной.