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

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
Dreamer
Сообщения: 10
Зарегистрирован: 20 авг 2007, 21:50

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

Сообщение Dreamer » 09 июн 2011, 20:00

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

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

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

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

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

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

Сообщение kdv » 15 июн 2011, 12:22

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

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

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

Сообщение hvlad » 15 июн 2011, 12:54

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

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

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

Сообщение dimitr » 17 июн 2011, 20:00

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

Ответить