Поправка на Firebird база данни

Firebird база данни (http://firebirdsql.com/) е отлична база данни с лесна инсталация и добри SQL възможности.

За съжаление файла, в който се съхранява базата данни (.fdb или .gdb) е по-вероятно да се повреди при спиране на тока. Още по-лошо е, че невинаги може да  се разбере веднага, че има проблем и грешките се натрупват.

Обикновено това се забелязва или при backup/ restore операция или при работа с IBExpert. Грешката е подобна на:

wrong (missing?) page #XXXX

или друго подобно, като обикновено се упоменава някакъв page, понякога wrong checksum или wrong pagetype.

За радост положението не е толкова лошо, колкото изглежда. Версиите на Firebird имат винаги checksum 12345 = 0x3039. Размерът на страницата е 4096 байта, но това може да се провери с gstat

Например, ако имаме грешка в страница 23069, то позицията във файла на тази страница е
23069 * 4096 = 94490624 (0x5A1D000)

С hex редактор гледаме какво има на този адрес, например

0x5A1D000: 01 00 3C 30 00 00 …

Това очевидно е сбъркано – вместо 3C 30 трябва да се запише checksum 39 30 (заради endian формата), а първия байт е типа на страницата. Обикновено може да се разбере какъв тип се очаква по грешката, която е възникнала, ако не – тук са описани типовете страници и какво означават.

След закърпването на базата задължително трябва да се направи пълен backup и restore. Важно е да се отбележи, че данните в тази страница най-вероятно са загубени, съответно и част от данните.

Част от информацията е от този линк: http://ybinzu.blogspot.com/2009/08/bad-checksum-firebird.html