10 мар. 2011 г.

Проблема с интервальными деревьями в старых файлах настроек

Если при восстановлении базы (ранее сконвертированной под Firebird 2.5) из архива выдает сообщение об ошибке с текстом "Input parameter mismatch for procedure USR$_P_EXLIM_...", значит на базу с новой структурой интервальных деревьев была загружена настройка со старыми деревьями.

В таком случае надо на исходной базе выполнить в окне SQL редактора команду:
DELETE FROM fin_versioninfo WHERE id > 112
Затем подключиться к ней новейшей версией gedemin.exe (всегда можно скачать с нашего сайта) и дождаться окончания обновления структуры базы данных. В процессе обновления будут пересозданы все процедуры и триггеры интервальных деревьев.

После этого базу можно архивировать.

Почему проблемная процедура создается без ошибок при загрузке настройки -- вопрос к создателям Firebird.

Особое внимание разработчикам! Все настройки с интервальными деревьями должны быть пересохранены после обновления структуры базы данных.

4 комментария:

Александр комментирует...

Видел другую проблему. Таблица интервальное дерево, процедуры нормальные (самые новые). Не работала перестройка дерева (процедура restruct), ругалась что вставляется не уникальное значение, в уникальный индекс по LB-RB. В итоге удалил индекс, запустил процедуру, создал индекс. Мистика...

Анонимный комментирует...

Согласен с Xander. Только это принесло решение. Первый вариант не работает

Анонимный комментирует...

Только можно не удалять а просто отключить уникальность, выполнить процедуру, включить назад. и для очистки совести снова выполнить.

Andrei комментирует...

Уникальных индексов в интервальном дереве по LB, RB быть НЕ ДОЛЖНО. С уникальными индексами процесс реструктуризации дерева в общем случае не пройдет.

http://gsbelarus.com/gs/wiki/index.php/Инфраструктура_интервальных_деревьев

В процессе апгрейда БД уникальные индексы (если они были) удаляются и те, что надо, -- создаются.

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