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

Фантомная зависимость, обрезанный бэкап

Добавлено: 09 июн 2011, 20:00
Dreamer
Firebird 2.5 win
Есть две проблемы(вторая следствие первой и моей глупости):
1) Стал замечать, что для некоторых таблиц появляются зависимости от несуществующих процедур(но существовавших ранее). Подобную таблицу нельзя удалить, зависимость видна в ibexpert в соответствующей вкладке. Однако попытка удалить процедуру оканчивается ошибкой(проца не существует) в списке так же нет. С этими таблицами и процедурами(их около десятка) связана одна особенность, а именно часто происходит следующая манипуляция в одной транзакции:
Пусть в базе есть несколько таблиц и связанных с ними процедур с которыми мы работаем(так же много других таблиц и процедур которые лежат спокойно и мы их никак не трогаем)
a) Удаляются процедуры
б) Удаляются таблицы
в) Таблицы создаются заново, обычно(но не всегда) почти все имеют те же самые имена и набор столбцов
г) Процедуры создаются заново, так же обычно(но не всегда) имеют те же самые имена
Попутно кое что вставляем и удаляем из других таблиц(не тех которые пересоздавали).
В системные таблицы не лазим(вообще в проекте ничего не пишу туда, кроме дескрипшенов для видов и их полей). Выполняем абсолютно легальные действия. В течении этих действий никто кроме нас базу не трогает(одно наше подключение).

Иногда после коммита оказывается что одна из пересозданных таблиц имеет зависимость от старого набора процедур(удаленного на шаге а).

Имеет ли место какой либо баг? Или это известная проблема? Может не стоит делать столько операций ddl в одной транзакции?

2) В случае, когда фантомная зависимость образовалась помогал бэкап/рестор. Один раз я сделал бэкап, вероятно он завершился какой-то ошибкой, я внимательно не посмотрел лог(да дурак признаю и посыпаю голову пеплом), восстановил его и увидел что хранимых процедур и триггеров в базе нет, только таблицы. Посмотрев внимательнее на файл я увидел что он занимает 1.5 мб вместо 100. Однако было поздно и база была перетертая, старый бэкап был месячной давности(да опять дурак). На счастье я обнаружил, что внутри оставшегося куска таки есть тексты большой части хранимых процедур, в сумме с месячным бэкапом это почти все что нужно.

Вопрос, есть ли не сложный способ подремонтировать этот кусок так что бы восстановилось все что в нем есть? Либо единственный вариант выдирать в ручную?

Re: Фантомная зависимость, обрезанный бэкап

Добавлено: 15 июн 2011, 12:22
kdv
из последнего бэкапа можно вытащить процедуры и триггеры через IBBackupSurgeon.
На будущее советую вместе с бэкапами делать isql база -x для сохранения всех метаданных в текстовом виде.

Re: Фантомная зависимость, обрезанный бэкап

Добавлено: 15 июн 2011, 12:54
hvlad
Dreamer писал(а):Имеет ли место какой либо баг? Или это известная проблема?
Ответить на эти вопросы можно было бы после изучения воспроизводимого примера.

Re: Фантомная зависимость, обрезанный бэкап

Добавлено: 17 июн 2011, 20:00
dimitr
для начала стоит попробовать последний снапшот. Нечто подобное (http://tracker.firebirdsql.org/browse/CORE-3314) исправлялось не так давно.