При ресторе FireBird 1.5 базы столкнулся тут с:
ERROR: internal gds software consistency check (referenced index description not found (173))
Взаимосвязи нормально по ключевым полям. повреждения внутри самих индексов (как я понял).
Ошибка нечастая. На моей памяти всего 2 раза была.
gfix не помогает. Сугерион тоже (странно, но лично видел, поэтому и пишу).
В итоге наработал технологию.
Берешь БД.
бэкапиш ее с таким набором ключей.
gbak -b -v -i -g -user SYSDBA -pass masterkey %1 %2
ресториш
gbak -c -v -y uot.txt -user SYSDBA -password masterkey %2 %3
uot.txt <- здесь лог рестора.
убиваешься об:
cannot commit index FK_%tablename1%_%tablename2%
проверяешь соответствие записей
select * from %tablename1% where %tablename2%_%key% not in (select %key% from %tablename2%)
должно показать 0 записей. если больше — удаляешь.
сносишь
ALTER TABLE %tablename2% drop CONSTRAINT UQ_%tablename2%
ALTER TABLE %tablename2% DROP CONSTRAINT PK_%tablename2%
ALTER TABLE %tablename1% DROP CONSTRAINT FK_%tablename1%_%tablename2%
(незабудь скрипты накатывающие скопировать, типа вот этого ALTER TABLE %tablename2% ADD CONSTRAINT UQ_%tablename2% UNIQUE (%pole%)
backup как описано выше, restore, убиваешься об следующий индекс типа
cannot commit index FK_%tablename3%_%tablename4%
лезеш внутрь, также проверяеш на соответствие записей, сносишь также связанные индексы в связанной таблице (образец выше)
откатные по восстановлению индексов складываешь отдельно, потом понадобятся.
и так до тех пор пока не отресторишь по человечески.
потом проливаешь откатные скрипты. (помнишь ты их выше прибирал в уголок? вот и потребовались.)
backup/restore и проверка на включенность индексов:
select R.RDB$CONSTRAINT_NAME, R.RDB$INDEX_NAME as REFINDEXNAME, I.RDB$INDEX_NAME as REALINDEX, I.RDB$RELATION_NAME, I.RDB$INDEX_INACTIVE from RDB$INDICES I RIGHT JOIN RDB$RELATION_CONSTRAINTS R on I.RDB$INDEX_NAME = R.RDB$INDEX_NAME WHERE R.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY' or R.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' order by R.RDB$CONSTRAINT_NAME
в последнем столбце должно быть только 0 или null
на всякий случай сравниваешь с нулевкой и backup/restore (здесь уже как обычно)
если все хорошо:
у объекта берем последнюю базу.
проливаем сразу все удаляющие скрипты.
backup/restore как я рассказывал выше.
проливаем накатывающие скрипты.
проверяем. (тоже описано)
backup/restore. выдаем на объект.
И идем в магазин — такое надо будет обмыть.
Popularity: 23%
Метки:firebird, referenced index description not found (173), Работа, работа, ремонт баз данныхСвязанные записи
Tags: firebird, referenced index description not found (173), работа, ремонт баз данных
Занятно пишите