2 дек. 2010 г.

Лечение поврежденной БД под Firebird 2.0

От клиентов пришла поврежденная база. Сервер Firebird 2.0. Внешне все ОК: gbak и gfix проходят без проблем, но некоторые хранимые процедуры не перекомпилируются (ALTER PROCEDURE) и не удаляются с сообщением:

This operation is not defined for system tables.
unsuccessful metadata update.
cannot delete.
COLUMN RDB$220.
there are 1 dependencies.

Соответственно, невозможен процесс апгрейда базы с помощью утилиты FDBConvert.

Вылечить базу получилось следующим образом:
  1. Определили список поврежденных процедур
  2. Для каждой из них сохранили исходный текст
  3. Удалили параметры процедуры с помощью запроса
    DELETE FROM rdb$procedure_parameters WHERE rdb$procedure_name = 'name'
  4. Удалили процедуру (DROP PROCEDURE)
Теперь база готова к конвертации или к бэкапу/разбэкапу. После чего можно восстановить удаленные процедуры.

UPD: Конкретно в этой базе проблемы были с процедурами: MSG_P_GETCHILDCOUNT_BOX, MSG_P_EXPANDLIMIT_BOX, MSG_P_RESTRUCT_BOX.

Комментариев нет:

Отправить комментарий