Відновлення (перепаковка, лікування) пошкодженої бази даних (БД) FireBird
При пошкодженні БД неможливо буває запустити програму, або при операціях с замовленнями виникають помилки. Наприклад:
- internal firebird consistency check (can't continue after bugcheck)
- internal firebird consistency check (cannot find record back version (291)
Відновлення БД виконується шляхом створення бекапу БД та наступним створенням нової БД із бекапу.
Відновлення (перепаковка) пошкодженої бази даних (БД) FireBird за допомогою інтерфейсу WinCalc
-
Потрібно вибрати функцію перепаковки бази:
-
Вибрати пошкоджену базу та запустити процес:
Увага! Процес перепаковки повинен пройти без помилок і в консолі має з'явитися повідомлення що процес закінчено. Оригінал бази даних після перепаковки потрібно заміни перепакованою версією.
Відновлення (перепаковка) пошкодженої бази даних (БД) FireBird за допомогою gbak та gfix
Скрипт відновлення БД (backup.cmd):
set dd=%date:.=_%
set dd=%date:~6,4%_%date:~3,2%_%date:~0,2%
copy %1 tmp.fdb || pause
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix" -mode read_only "tmp.fdb" -user SYSDBA -pas masterkey || pause
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix" -mend -ignore "tmp.fdb" -user SYSDBA -pas masterkey || pause
"C:\Program Files\Firebird\Firebird_2_5\bin\gbak" -b -g -ignore -v "tmp.fdb" "tmp.fdk" -user SYSDBA -pas masterkey || pause
del tmp.fdb || pause
"C:\Program Files\Firebird\Firebird_2_5\bin\gbak" -c -v "tmp.fdk" "%dd%_%1" -user SYSDBA -pas masterkey || pause
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix" -mode read_write "%dd%_%1" -user SYSDBA -pas masterkey || pause
"C:\Program Files\Firebird\Firebird_2_5\bin\gfix" -use reserve "%dd%_%1" -user SYSDBA -pas masterkey || pause
del tmp.fdk || pause
Виконуємо у командній строці:
backup.cmd wcglobal.fdb
Помилки при відновленні БД
В деяких випадках потрібне ручне втручання у процес відновлення, наступні приклади допоможуть вирішити проблему якщо при автоматичному відновленні виникає помилка. Для цього потрібні навички підключення до БД за допомогою будь-якої програми (IBExpert, Flame Robin, тощо.)
ERROR:validation error for column "XXX"."ID", value "*** null ***"
gbak:restoring data for table REPORTS
gbak: ERROR:validation error for column "REPORTS"."ID", value "*** null ***"
gbak: ERROR:warning -- record could not be restored
Помилка виникає в тому випадку, коли в пошкодже ній БД одна з таблиць має рядок із значенням ключового поля (зазвичай ID) null. Для цього потрібно відкрити таблицю БД та видалити вручну проблемний рядок. Наприклад:
Якщо рядок видалити не виходить, як варіант видалення первинного ключа або індексу з таблиці: