Страница 1 из 1

Проблемы с бэкапом и с последующим восстановлением

Добавлено: 13 май 2008, 12:00
MrNumbers
Имеется база, которая стояла на 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.
При восстановлении результат неизменный.
Что ещё можно попробовать?

Добавлено: 13 май 2008, 16:17
WildSery
Поставить IB той версии, с какой базу стырил. Да ещё и стырил с подключенными ползателями.

Добавлено: 13 май 2008, 19:27
Attid
интересно почему оракл не поставил или МССКЛ . а так просто файрберд =) кто его вообще к базе подпустил ? =)

Добавлено: 14 май 2008, 08:52
MrNumbers
Проверил оригинал базы с помощью 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. Базу тырил не я - начальник мне её скинул на файловый сервер и сказал, чтобы я попытался её починить.

Добавлено: 14 май 2008, 10:01
kdv
Поможет ли мне починить базу покупка IBFirstAID?
не знаю. база многофайловая, причина повреждений неизвестна, и т.д.

Добавлено: 14 май 2008, 15:58
MrNumbers
Доп. информация:
сервер - InterBase 5.6.
База копировалась с остановкой сервиса.

Добавлено: 14 май 2008, 18:30
WildSery
Ну так поставь триал IB5.6 и ресторь.

Добавлено: 16 май 2008, 09:57
MrNumbers
Долго гуглил, так и не нашёл триал IB 5.6. Нашёл одну версию, которая требует Certificate ID и Certificate Key. Подскажите, где такой раритет можно достать? :roll:

Добавлено: 16 май 2008, 10:20
kdv
чтобы получить триал, вместо certificate id надо ввести слово eval.

да, IB 5.6 уже не продается, но тем не менее бесплатно его использовать не разрешается.

Добавлено: 16 май 2008, 11:10
MrNumbers
Спасибо за подсказку :wink: Использовать не собираюсь, нужно только базу починить. О результатах отпишу :)
gbak: ERROR: column RET_ID is not defined in table ANALOG_D
Самое смешное, что ANALOG_D - это процедура, а RET_ID - её переменная. И я не понимаю, почему Firebird их воспринимает как таблицу и её колонку :?

Добавлено: 19 май 2008, 08:41
MrNumbers
М-да, с 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 не посчитал процедуру за таблицу.
Даже не знаю, что можно ещё сделать... :(

Добавлено: 19 май 2008, 10:26
kdv
Даже не знаю, что можно ещё сделать..
http://www.ibase.ru/dbrepair.htm

Добавлено: 21 май 2008, 08:45
MrNumbers
Починил я свою базу! \:D/
А использовал я для этого 2 программы:
одна - Open Source программка IBDBRepair, которая копирует из базы всё, что можно скопировать, в новую базу. А вторая - всем известный IBExpert, который нашёл мне различия между базами и скопировал недостающее (в частности, процедуры). После этого и backup и restore прошли на ура. База даже похудела на 1 Гб! А данные потерялись всего в одной таблице, куда скидывался архив ошибок системы.
Вот так, Open Source - это круто! =D>

Добавлено: 21 май 2008, 09:44
Attid
IBExpert не опен сурс =)
но им можно было сделать тоже самое что ты делал двумя програмами.

Добавлено: 21 май 2008, 10:23
WildSery
MrNumbers писал(а):дна - Open Source программка IBDBRepair, которая копирует из базы всё, что можно скопировать, в новую базу. А вторая - всем известный IBExpert, который нашёл мне различия между базами и скопировал недостающее (в частности, процедуры).
Из этого абзаца понимаю, что IBDBRepair - полное Г, если IBExpert "видит" больше него.

Добавлено: 21 май 2008, 12:31
kdv
IBDBRepair - полное Г,
глянул в исходники. оно использует IBDatabase, IBQuery, IBSQL. Т.е. никакой физической работы с файлом БД. Следовательно, утилита практически бесполезная в смысле "ремонта" БД.
Также, там много "копирований" инфы из системных таблиц. В общем, более-менее серьезное повреждение эта утилита не починит, потому что она вообще не чинит - она просто пытается прочитать и скопировать данные, причем прочитать самым обычным способом через select.
А скопировать данные с тем же успехом можно и IBPump-ом.

p.s. с какого бодуна там заявляется, что оно может читать данные даже при consistency check - не знаю.

Добавлено: 22 май 2008, 10:19
MrNumbers
Всё же одна проблемка осталась: не хочет восстанавливаться часть процедур. Ошибка следующая:
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'ом. Или тут что-то другое?

Добавлено: 22 май 2008, 12:12
kdv
Вроде бы это стандартные функции
а может и нет. в rdb$functions смотрел?

Добавлено: 22 май 2008, 12:23
MrNumbers
Да, они там есть.

Вопрос решился копированием файла ib_udf.dll с того сервера, с которого снята база. Причём в директории lib он остался тот же (версии 5.6), а в директорию bin нужно было положить файл версии 5.1. Не знаю, почему, но это решило проблему. Вроде и размер у них одинаковый, не понимаю...

Добавлено: 22 май 2008, 13:30
kdv
в lib??? там никакие udf не живут. т.е. туда можно положить что угодно, даже doc или avi.
вот почему от 5.1 - это уже интересно. Хотя, впрочем, нет. Сервер старый, неинтересно.