Переход с Firebird 1.5.3 на 2.0.1

Совместимость InterBase, Firebird, Yaffil между собой и по версиям

Модераторы: kdv, Alexey Kovyazin

Ответить
Spa_2002
Сообщения: 28
Зарегистрирован: 13 май 2005, 15:47

Переход с Firebird 1.5.3 на 2.0.1

Сообщение Spa_2002 » 24 авг 2007, 14:01

Может, кто-то встретится с проблемами, похожими на те, которые встретились у меня. Привожу историю моего перехода.

Перевод базы с версии Firebird 1.5.3(153) на 2.0(20)

Прямое восстановление резервной копии, сделанной под сервером 153 на сервере 20 дало неработоспособную базу: Перестали работать часть функций, находящихся в FreeUDFlib.dll, при компиляции ХП на многие стала выходить ошибка "операция, неприменимая к системным таблицам,возможно рекурсионный вызов". Причем ошибка в ХП выходила даже если пытаться компилировать процедуру с закоментаренным телом.

Операции с базой на 20 проводились из IBExpert на машине с 20, операции с базой 153 соответственно из IBExpert на машине где установлен Firebird 153. Сначала пытался с IBE на 153 работать с базой 20 , но потом заметил неоднозначность некоторых операций.(см.ниже)

Процесс перехода.
1. На 153 вместо функций из FreeUDFlib.dll были подключены аналогичные из FreeAdhocUDF.dll
2. Под сервером 153 метаданные базы были выгружены в скрипт.
3. Под сервером 20 (IBExpert находился на сервере 20) пустая база восстановлена из скрипта. Несколько попыток восстановления - каждый раз подправлял ссылки на глючившие функции FreeUDFlib.dll -> FreeAdhocUDF.dll).
4. Убедился что процедуры и триггеры компилируются под 20.
5. С помощью программы IBPump перекачал данные из рабочей базы в новую , которая под 20.
6. Создал пользователей на новом сервере.
7. На сервере 20 роли восстановились из скрипта , привилегии на таблицы пришлось раздавать заново. (через скрипт для каждой роли.) Почему то IBExpert на машине ,где установлен 153 показывал
для базы на 20 что привилегии назначены , а IBExpert на 20 машине показывал пустую таблицу привилегий для тех же ролей. (???)
8. Переправил путь для коннекта с базой в файле UDL - программа заработала c новой базой. Работаю через АДО (ZStyle OLEDB provider)

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 24 авг 2007, 14:13

Пока не вижу, где тут собственно проблемы перехода на 2-ку.
Вижу, что непродуман переход на другую DLL, помучился.
А где вот например, "неоднозначность некоторых операций.(см.ниже)"? Не туда смотрю?
Или вот "операция, неприменимая к системным таблицам,возможно рекурсионный вызов" - что было-то? решилось?

Spa_2002
Сообщения: 28
Зарегистрирован: 13 май 2005, 15:47

Сообщение Spa_2002 » 24 авг 2007, 14:34

Проблема 1: База просто восстановлена под новым сервером и не работает, т.к. ХП не компилируются по 2м пееречисленным выше причинам.

Проблема 2: ковыряясь в этой восстановленной базе (проблема 1) работоспособность ХП восстановить не удается.

Неоднозначность: Привилегии в базе, расположенной на 20, подключенной к IBExpert , расположенному на 153, показываеют что все разрешения на таблицы розданы как надо , на самом деле их нет на 20 сервере.

В итоге пара дней и много кликов потрачены чтобы заставить базу работать под новым сервером, т.к. планируется все новые задачи запускать под 20 и чтобы не плодить версии серверов нужно было перейти на 20. А если бы подобный текст попался на глаза в свое время , переход занял бы гораздо меньшее время (ИМХО)

Про рекурсионный вызов насколько я понял проблема была в том что процедура изначально была создана под другой версией сервера, при восстановлении из скрипта таких замечаний уже не было , хотя текст процедур не менялся.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 24 авг 2007, 15:12

Spa_2002 писал(а): Про рекурсионный вызов насколько я понял проблема была в том что процедура изначально была создана под другой версией сервера, при восстановлении из скрипта таких замечаний уже не было , хотя текст процедур не менялся.
При восстановлении из бакапа процедуры не перекомпилируются - достаточно было после восстановления их соответственно перекомпилировать на новом.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 24 авг 2007, 18:08

Spa_2002 писал(а):Про рекурсионный вызов насколько я понял проблема была в том что процедура изначально была создана под другой версией сервера, при восстановлении из скрипта таких замечаний уже не было , хотя текст процедур не менялся.
Это не важно, в целом. Если после рестора её перекомпилить.
Я вот с 1.0.3 на 2.0.1 сейчас перевожу, представляю прекрасно, какие могут быть трудности.
А вот про ту ошибку, что ты писал, не слышал. И если ты утверждаешь, что из скрипта та же самая процедура (без правок синтаксиса) нормально создалась - ничего не могу сказать. Разве что "не поверю, пока не увижу".
Может, птицеводы заглянут в ветку и что-нибудь скажут. Хотя, тут довольно мало информации по этой ошибке.
stix-s писал(а):При восстановлении из бакапа процедуры не перекомпилируются - достаточно было после восстановления их соответственно перекомпилировать на новом.
Так он и пишет, что пытался перекомпилить - не выходит каменный цветок.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 24 авг 2007, 18:20

WildSery писал(а): Так он и пишет, что пытался перекомпилить - не выходит каменный цветок.
Вот это-то и непонятно :(

Spa_2002
Сообщения: 28
Зарегистрирован: 13 май 2005, 15:47

Сообщение Spa_2002 » 27 авг 2007, 06:05

Дело наверное все-таки было в функциях из FreeUDFlib.dll, ставших нерабочими. Многие ХП используют внутри себя другие ХП в которых в свою очередь используются нерабочие функции . Видимо начал отладку не того конца, поэтому получал глюки.

Ответить