Не идёт бэкап firebird

Возникновение ошибок в процессе бэкапа связано с повреждением самой базы данных или данных внутри нее.

Типы повреждений баз данных:
1. Отключение питания компьютера
2. Поломки/неисправности оборудования
1. ОЗУ
2. Винчестера
3. контроллеры
4. другие программы
3. Сбой компьютера
4. Прерывание сборки мусора
5. Повреждения индексов
6. Повреждения таблиц данных

Работу будем вести с не забэкапленой последней копией базы. Оригинальную базу излишний раз тревожить ненужно.

Полный разбор ситуации:
Определиться с чем имеем дело: смотрим firebird.log
По имеющимся ошибкам идем в гугль и смотрим описания ошибок. Так же важна история возникновения ошибок. Если разовая — то скорее всего скакнул свет или однократный сбой оборудования. Если повторялись — то это уже вопрос к винчестерам или неоднократный сбой оборудования. Ну это уже вопросы к наблюдательности админа сервера.

После чего прогоняем gfix:
[путь к gfix]\gfix -user SYSDBA -pass masterkey -v -full database.fdb

Если ничего не показал — то это живая БД )) Но чаще всего это не так. Будем лечить.

Если выдаются ошибки checksum error:
[путь к gfix]\gfix -user SYSDBA -pass masterkey -v -ignore database.fdb

Если предыдущая команда обнаружила ошибки, то нужно их исправить командой.

[путь к gfix]\gfix -user SYSDBA -pass masterkey -mend database.fdb

ключ -mend помечает поврежденные структуры как исключаемые при backup. В итоге целостность между таблицами может быть нарушена, и даже если после этого backup пройдет, может случиться, что базу данных получится восстановить из backup. В этом случае придется вручную снимать данные при помощи утилит типа IBPump.

Проверим, все ли починилось:

[путь к gfix]\gfix -user SYSDBA -pass masterkey -v -full database.fdb

Если на этот момент вы все еще видите ошибки, то нужно сделать backup, при этом обязательно отключать уборку мусора (ключ -g):
[путь к gbak]\gbak -user SYSDBA -pass masterkey -b -v -ig -g database.fdb database.fbk

ключ -ig игнорирует ошибки при чтении структур данных, и пытается записать в backup все неповрежденные структуры и данные. Не указывайте ключ -ig при стандартном бэкапе.

Попытаемся развернуть бэкап:
[путь к gbak]\gbak -user SYSDBA -pass masterkey gbak -c -v database.fbk new.fdb

Бывает, что после всех операций распаковка не получается. Бывает, что ошибки остаются. В этих случаях можно попытаться отработать программой IB Surgeon. Более серьезная программа, хорошо справляется с большинством ошибок, но к сожалению платная. Про нее в следующих статьях.

Если бэкап сваливается на попытке закоммитить индексы можно попробовать точечное восстановление.

Как известно, восстановление базы данных из бэкапа происходит следующим образом:

1. gbak дает команду серверу создать новую БД с параметрами из бэкапа.
2. gbak копирует в новую базу пользовательские метаданные из бэкапа.
3. gbak копирует в новую базу пользовательские данные из бэкапа.
4. gbak коммитит (создает) все индексы.

Поскольку индексы создаются в самом конце процесса restore, то ошибки при их создании не являются смертельными для функционирования БД (хе-хе, ну все зависит от самой базы ;) ), разве что без индексов запросы будут работать очень медленно. Во всех версиях InterBase и Firebird (кроме Firebird 2.x) при первой же ошибке создания индекса дальнейшее создание индексов обрывается. В Firebird 2.x ошибка создания индекса сообщается, но создание других индексов продолжается, что позволяет легко идентифицировать неактивные индексы по окончании restore.

Точечное восстановление:

Дубликаты в уникальных индексах: Соответственно, при наличии дубликатов в уникальном индексе нужно эти дубликаты найти, а затем удалить.

Отсутствующие записи по Foreign key:Нужно выполнить запрос, который покажет имеющиеся в детали и отсутствующие в мастере идентификаторы.
Затем можно или записи с этими идентификаторами удалить из таблицы деталей, либо добавить соответствующие записи в таблицу-мастер.

Оригинал статьи: http://www.ibase.ru/devinfo/db_repair.htm

Popularity: 37%

Share and Enjoy:
  • StumbleUpon
  • Blogplay
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Slashdot
  • Socialogs
  • Suggest to Techmeme via Twitter
  • Technorati
  • ThisNext
  • Tipd
  • Upnews
Метки:firebird, Работа, работа, ремонт баз данных

Связанные записи

Tags: , ,

10 комментариев на “Не идёт бэкап firebird”

  1. Самохин пишет:

    Полностью солидарен с 3ым коментарием. Оно того стоит...

  2. Дмитрий пишет:

    Нормально, можно cделать маленький сборник.

  3. admin пишет:

    Ну, сборник — не сборник — а вот книжку я всетки лелелю))

  4. Михаил пишет:

    Попробую, попозже отпишусь.

  5. Елена пишет:

    Интересно, я попробую.

  6. Mike пишет:

    Хорошая масль, вообще молодцы!

  7. Лена пишет:

    Последний абзац в тему!

  8. Натан пишет:

    Хм... После прочтения даже мне тема стала интересна.

  9. Галактика пишет:

    Интересный пост, спасибо. Меня интересует вопрос — будет ли продолжение? :)

  10. Эволюция пишет:

    У меня совсем скоро в букмарках место закончится, но я буду рад добавлять с вашего блога и дальше ссылочки на интересные темы!

Ответить

Господа. Блог переводится в режим nofollow. Адрес сайта сохраняться не будет.

Подписаться на Записки админа. Email
NosTale RU

Записки админа is powered by Crazy Admin
Copyright © 2009.