Перейти до основного вмісту

Відновлення (перепаковка, лікування) пошкодженої бази даних (БД) FireBird

При пошкодженні БД неможливо буває запустити програму, або при операціях с замовленнями виникають помилки. Наприклад:

  • internal firebird consistency check (can't continue after bugcheck)
  • internal firebird consistency check (cannot find record back version (291)

Відновлення БД виконується шляхом створення бекапу БД та наступним створенням нової БД із бекапу.

Відновлення (перепаковка) пошкодженої бази даних (БД) FireBird за допомогою інтерфейсу WinCalc

  • Потрібно вибрати функцію перепаковки бази:

    Відновлення за допомогою інтерфейсу ПЗ WinCalc

  • Вибрати пошкоджену базу та запустити процес:

    Відновлення за допомогою інтерфейсу ПЗ 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. Для цього потрібно відкрити таблицю БД та видалити вручну проблемний рядок. Наприклад:

ERROR error for column "XXX"."ID", value "*** null ***"

Якщо рядок видалити не виходить, як варіант видалення первинного ключа або індексу з таблиці:

ERROR error for column "XXX"."ID", value "*** null ***"