Проблемы с бэкапом и с последующим восстановлением
Модераторы: kdv, Alexey Kovyazin
Проблемы с бэкапом и с последующим восстановлением
Имеется база, которая стояла на Interbase (не знаю, какой версии). Перестал делаться бэкап. Размер - 8 Гб с хвостиком, разделена на 3 файла. Скопировал себе базу на локальный комп, поставил Firebird 1.5, попытался сделать бэкап: где-то на середине gbak вылетает с ошибкой wrong page type (expected 5, found 0). Сделал проверку базы gfix'ом:
Number of record level errors : 5
Number of data page errors : 1
Number of index page errors : 14
Number of database page errors : 24
Запустил команду лечения (gfix -m). После этого база успешно забэкапилась, но восстановить (gbak -c) из неё данные до конца не получается: где-то на 6,8 Гб вылетает ошибка:
gbak: ERROR: invalid request BLR at offset 203
gbak: ERROR: column RET_ID is not defined in table ANALOG_D
gbak: Exiting before completion due to errors
Пробовал бэкапить и gbak -b -v, и gbak -b -v -ig, и gbak -b -v -ig -g.
При восстановлении результат неизменный.
Что ещё можно попробовать?
Number of record level errors : 5
Number of data page errors : 1
Number of index page errors : 14
Number of database page errors : 24
Запустил команду лечения (gfix -m). После этого база успешно забэкапилась, но восстановить (gbak -c) из неё данные до конца не получается: где-то на 6,8 Гб вылетает ошибка:
gbak: ERROR: invalid request BLR at offset 203
gbak: ERROR: column RET_ID is not defined in table ANALOG_D
gbak: Exiting before completion due to errors
Пробовал бэкапить и gbak -b -v, и gbak -b -v -ig, и gbak -b -v -ig -g.
При восстановлении результат неизменный.
Что ещё можно попробовать?
Проверил оригинал базы с помощью IBFirstAID Diagnostician 2.0.
Единственное место, где есть ошибка, это:
13.05.2008 19:54:36 ERROR: Expected data page at#4179801 but found pageType: Database header page
13.05.2008 19:54:36 ERROR: Error on data page #4179801
13.05.2008 19:54:36 INFO: Pointer page #4155616 checking: found 1 errors.
13.05.2008 20:09:16 ERROR: Error in checking relation #134 Found 1 errors.
13.05.2008 20:09:16 ERROR: Relation ERRORBAG (134) is CORRUPT
Т.е. всего 3 ошибки, хотя gfix нашёл гораздо больше.
Поможет ли мне починить базу покупка IBFirstAID?
P.S. Базу тырил не я - начальник мне её скинул на файловый сервер и сказал, чтобы я попытался её починить.
Единственное место, где есть ошибка, это:
13.05.2008 19:54:36 ERROR: Expected data page at#4179801 but found pageType: Database header page
13.05.2008 19:54:36 ERROR: Error on data page #4179801
13.05.2008 19:54:36 INFO: Pointer page #4155616 checking: found 1 errors.
13.05.2008 20:09:16 ERROR: Error in checking relation #134 Found 1 errors.
13.05.2008 20:09:16 ERROR: Relation ERRORBAG (134) is CORRUPT
Т.е. всего 3 ошибки, хотя gfix нашёл гораздо больше.
Поможет ли мне починить базу покупка IBFirstAID?
P.S. Базу тырил не я - начальник мне её скинул на файловый сервер и сказал, чтобы я попытался её починить.
Спасибо за подсказку Использовать не собираюсь, нужно только базу починить. О результатах отпишу
Самое смешное, что ANALOG_D - это процедура, а RET_ID - её переменная. И я не понимаю, почему Firebird их воспринимает как таблицу и её колонкуgbak: ERROR: column RET_ID is not defined in table ANALOG_D
М-да, с InterBase'ом оказалось ещё хуже - он вылетел при restore уже на 4 Гб, но с другой ошибкой:
gbak: ERROR: database file appears corrupt ()
gbak: ERROR: wrong page type
gbak: ERROR: page 4 is of wrong type (expected 6, found 5)
gbak: ERROR: gds_$send failed
gbak: Exiting before completion due to errors
gbak: ERROR: database file appears corrupt ()
gbak: ERROR: wrong page type
gbak: ERROR: page 229 is of wrong type (expected 3, found 5)
gbak: ERROR: database file appears corrupt ()
gbak: ERROR: wrong page type
gbak: ERROR: page 229 is of wrong type (expected 3, found 5)
Хотя gfix -m я к этой базе уже применил.
Хорошо хоть IB не посчитал процедуру за таблицу.
Даже не знаю, что можно ещё сделать...
gbak: ERROR: database file appears corrupt ()
gbak: ERROR: wrong page type
gbak: ERROR: page 4 is of wrong type (expected 6, found 5)
gbak: ERROR: gds_$send failed
gbak: Exiting before completion due to errors
gbak: ERROR: database file appears corrupt ()
gbak: ERROR: wrong page type
gbak: ERROR: page 229 is of wrong type (expected 3, found 5)
gbak: ERROR: database file appears corrupt ()
gbak: ERROR: wrong page type
gbak: ERROR: page 229 is of wrong type (expected 3, found 5)
Хотя gfix -m я к этой базе уже применил.
Хорошо хоть IB не посчитал процедуру за таблицу.
Даже не знаю, что можно ещё сделать...
http://www.ibase.ru/dbrepair.htmДаже не знаю, что можно ещё сделать..
Починил я свою базу!
А использовал я для этого 2 программы:
одна - Open Source программка IBDBRepair, которая копирует из базы всё, что можно скопировать, в новую базу. А вторая - всем известный IBExpert, который нашёл мне различия между базами и скопировал недостающее (в частности, процедуры). После этого и backup и restore прошли на ура. База даже похудела на 1 Гб! А данные потерялись всего в одной таблице, куда скидывался архив ошибок системы.
Вот так, Open Source - это круто! =D>
А использовал я для этого 2 программы:
одна - Open Source программка IBDBRepair, которая копирует из базы всё, что можно скопировать, в новую базу. А вторая - всем известный IBExpert, который нашёл мне различия между базами и скопировал недостающее (в частности, процедуры). После этого и backup и restore прошли на ура. База даже похудела на 1 Гб! А данные потерялись всего в одной таблице, куда скидывался архив ошибок системы.
Вот так, Open Source - это круто! =D>
Из этого абзаца понимаю, что IBDBRepair - полное Г, если IBExpert "видит" больше него.MrNumbers писал(а):дна - Open Source программка IBDBRepair, которая копирует из базы всё, что можно скопировать, в новую базу. А вторая - всем известный IBExpert, который нашёл мне различия между базами и скопировал недостающее (в частности, процедуры).
глянул в исходники. оно использует IBDatabase, IBQuery, IBSQL. Т.е. никакой физической работы с файлом БД. Следовательно, утилита практически бесполезная в смысле "ремонта" БД.IBDBRepair - полное Г,
Также, там много "копирований" инфы из системных таблиц. В общем, более-менее серьезное повреждение эта утилита не починит, потому что она вообще не чинит - она просто пытается прочитать и скопировать данные, причем прочитать самым обычным способом через select.
А скопировать данные с тем же успехом можно и IBPump-ом.
p.s. с какого бодуна там заявляется, что оно может читать данные даже при consistency check - не знаю.
Всё же одна проблемка осталась: не хочет восстанавливаться часть процедур. Ошибка следующая:
Invalid token. invalid request BLR at offset 852. function IB_UDF_SUBSTR is not defined. module name or entrypoint could not be found.
Так же повторяется и с функциями XOR_INT и BIN_AND.
Короче, не восстанавливаются процедуры, которые используют вышеназванные функции.
Вроде бы это стандартные функции, включённые в ib_udf.dll, который идёт вместе с InterBase'ом. Или тут что-то другое?
Invalid token. invalid request BLR at offset 852. function IB_UDF_SUBSTR is not defined. module name or entrypoint could not be found.
Так же повторяется и с функциями XOR_INT и BIN_AND.
Короче, не восстанавливаются процедуры, которые используют вышеназванные функции.
Вроде бы это стандартные функции, включённые в ib_udf.dll, который идёт вместе с InterBase'ом. Или тут что-то другое?
Да, они там есть.
Вопрос решился копированием файла ib_udf.dll с того сервера, с которого снята база. Причём в директории lib он остался тот же (версии 5.6), а в директорию bin нужно было положить файл версии 5.1. Не знаю, почему, но это решило проблему. Вроде и размер у них одинаковый, не понимаю...
Вопрос решился копированием файла ib_udf.dll с того сервера, с которого снята база. Причём в директории lib он остался тот же (версии 5.6), а в директорию bin нужно было положить файл версии 5.1. Не знаю, почему, но это решило проблему. Вроде и размер у них одинаковый, не понимаю...