Переход с Firebird 1.5.3 на 2.0.1
Модераторы: kdv, Alexey Kovyazin
Переход с Firebird 1.5.3 на 2.0.1
Может, кто-то встретится с проблемами, похожими на те, которые встретились у меня. Привожу историю моего перехода.
Перевод базы с версии 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)
Перевод базы с версии 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)
Пока не вижу, где тут собственно проблемы перехода на 2-ку.
Вижу, что непродуман переход на другую DLL, помучился.
А где вот например, "неоднозначность некоторых операций.(см.ниже)"? Не туда смотрю?
Или вот "операция, неприменимая к системным таблицам,возможно рекурсионный вызов" - что было-то? решилось?
Вижу, что непродуман переход на другую DLL, помучился.
А где вот например, "неоднозначность некоторых операций.(см.ниже)"? Не туда смотрю?
Или вот "операция, неприменимая к системным таблицам,возможно рекурсионный вызов" - что было-то? решилось?
Проблема 1: База просто восстановлена под новым сервером и не работает, т.к. ХП не компилируются по 2м пееречисленным выше причинам.
Проблема 2: ковыряясь в этой восстановленной базе (проблема 1) работоспособность ХП восстановить не удается.
Неоднозначность: Привилегии в базе, расположенной на 20, подключенной к IBExpert , расположенному на 153, показываеют что все разрешения на таблицы розданы как надо , на самом деле их нет на 20 сервере.
В итоге пара дней и много кликов потрачены чтобы заставить базу работать под новым сервером, т.к. планируется все новые задачи запускать под 20 и чтобы не плодить версии серверов нужно было перейти на 20. А если бы подобный текст попался на глаза в свое время , переход занял бы гораздо меньшее время (ИМХО)
Про рекурсионный вызов насколько я понял проблема была в том что процедура изначально была создана под другой версией сервера, при восстановлении из скрипта таких замечаний уже не было , хотя текст процедур не менялся.
Проблема 2: ковыряясь в этой восстановленной базе (проблема 1) работоспособность ХП восстановить не удается.
Неоднозначность: Привилегии в базе, расположенной на 20, подключенной к IBExpert , расположенному на 153, показываеют что все разрешения на таблицы розданы как надо , на самом деле их нет на 20 сервере.
В итоге пара дней и много кликов потрачены чтобы заставить базу работать под новым сервером, т.к. планируется все новые задачи запускать под 20 и чтобы не плодить версии серверов нужно было перейти на 20. А если бы подобный текст попался на глаза в свое время , переход занял бы гораздо меньшее время (ИМХО)
Про рекурсионный вызов насколько я понял проблема была в том что процедура изначально была создана под другой версией сервера, при восстановлении из скрипта таких замечаний уже не было , хотя текст процедур не менялся.
При восстановлении из бакапа процедуры не перекомпилируются - достаточно было после восстановления их соответственно перекомпилировать на новом.Spa_2002 писал(а): Про рекурсионный вызов насколько я понял проблема была в том что процедура изначально была создана под другой версией сервера, при восстановлении из скрипта таких замечаний уже не было , хотя текст процедур не менялся.
Это не важно, в целом. Если после рестора её перекомпилить.Spa_2002 писал(а):Про рекурсионный вызов насколько я понял проблема была в том что процедура изначально была создана под другой версией сервера, при восстановлении из скрипта таких замечаний уже не было , хотя текст процедур не менялся.
Я вот с 1.0.3 на 2.0.1 сейчас перевожу, представляю прекрасно, какие могут быть трудности.
А вот про ту ошибку, что ты писал, не слышал. И если ты утверждаешь, что из скрипта та же самая процедура (без правок синтаксиса) нормально создалась - ничего не могу сказать. Разве что "не поверю, пока не увижу".
Может, птицеводы заглянут в ветку и что-нибудь скажут. Хотя, тут довольно мало информации по этой ошибке.
Так он и пишет, что пытался перекомпилить - не выходит каменный цветок.stix-s писал(а):При восстановлении из бакапа процедуры не перекомпилируются - достаточно было после восстановления их соответственно перекомпилировать на новом.