Хе-хе — referenced index description not found (173) — победил ))

При ресторе 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: 16%

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, referenced index description not found (173), Работа, работа, ремонт баз данных

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

Tags: , , ,

Один комментарий на “Хе-хе — referenced index description not found (173) — победил ))”

  1. goglerr пишет:

    Занятно пишите

Ответить

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

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

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