Переход с Yaffil на Firebird 2.0.x
Материал из GedeminWiki
(Различия между версиями)
Alexander (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| − | Основная проблема при миграции | + | Основная проблема при миграции базы с сервера [[Yaffil]] на Firebird 2.0.х -- это отсутствие в последнем встроенных функций '''BIN_AND''' и '''BIN_OR''', широко используемых в триггерах и хранимых процедурах базы данных Гедымина. |
Для перехода в ручном режиме вам понадобится свежая установка сервера [http://firebirdsql.org/index.php?op=files&id=engine Firebird 2.0.x] и утилита [http://ibexpert.net/ibe/index.php?n=Main.TrialVersion IBExpert]. | Для перехода в ручном режиме вам понадобится свежая установка сервера [http://firebirdsql.org/index.php?op=files&id=engine Firebird 2.0.x] и утилита [http://ibexpert.net/ibe/index.php?n=Main.TrialVersion IBExpert]. | ||
| Строка 8: | Строка 8: | ||
# Деинсталируем Yaffil. Не забываем сохранить [[gudf.dll]] из подкаталога udf основного каталога размещения сервера Yaffil. | # Деинсталируем Yaffil. Не забываем сохранить [[gudf.dll]] из подкаталога udf основного каталога размещения сервера Yaffil. | ||
# Устанавливаем и запускаем сервер Firebird 2.0.5 (последняя доступная версия на момент написания статьи). | # Устанавливаем и запускаем сервер Firebird 2.0.5 (последняя доступная версия на момент написания статьи). | ||
| − | # Копируем библиотеку gudf.dll в подкаталог udf. | + | # Копируем библиотеку gudf.dll в подкаталог udf сервера Firebird. |
| − | # Устанавливаем IBExpert | + | # Устанавливаем IBExpert (если он еще не был установлен) |
# Подключаемся к существующей базе с помощью IBExpert | # Подключаемся к существующей базе с помощью IBExpert | ||
# Регистрируем внешние функции с помощью команд: | # Регистрируем внешние функции с помощью команд: | ||
| Строка 24: | Строка 24: | ||
# Не забываем делать COMMIT после каждой команды. | # Не забываем делать COMMIT после каждой команды. | ||
| − | # | + | # В дереве объектов базы данных, используя меню по правой нопке мыши, выполняем команды '''Перекомпилировать процедуры''' и '''Перекомпилировать триггеры'''. |
| − | # Если в процессе перекомпиляции позникают ошибки, то вносим исправления в исходный код и повторно запускаем перекомпиляцию. | + | # Если в процессе перекомпиляции позникают ошибки, то вносим исправления в исходный код с помощью команд '''ALTER TRIGGER''' или '''ALTER PROCEDURE''' и повторно запускаем перекомпиляцию. Если вы не знаете как исправить ошибочный код триггера или процедуры, то временно можно закоментировать все команды между первым '''BEGIN''' и последним '''END'''. После окончания процесса миграции не забудьте вернуться, раскоментировать код и исправить все ошибки. |
| − | # Делаем архивную копию и восстанавливаем базу из архива. | + | # Делаем архивную копию и восстанавливаем базу из архива. ВНИМАНИЕ! При восстановлении БД с установленным флагом Commit after each table могут возникать ошибки. В этом случае следует снять указанный флаг и повторить процедуру восстановления базы из архивной копии. |
С серверной частью все. Остается на клиентских машинах: | С серверной частью все. Остается на клиентских машинах: | ||
Версия 20:07, 5 августа 2009
Основная проблема при миграции базы с сервера Yaffil на Firebird 2.0.х -- это отсутствие в последнем встроенных функций BIN_AND и BIN_OR, широко используемых в триггерах и хранимых процедурах базы данных Гедымина.
Для перехода в ручном режиме вам понадобится свежая установка сервера Firebird 2.0.x и утилита IBExpert.
Последовательность действий:
- На всякий случай архивируем существующую БД.
- Деинсталируем Yaffil. Не забываем сохранить gudf.dll из подкаталога udf основного каталога размещения сервера Yaffil.
- Устанавливаем и запускаем сервер Firebird 2.0.5 (последняя доступная версия на момент написания статьи).
- Копируем библиотеку gudf.dll в подкаталог udf сервера Firebird.
- Устанавливаем IBExpert (если он еще не был установлен)
- Подключаемся к существующей базе с помощью IBExpert
- Регистрируем внешние функции с помощью команд:
DECLARE EXTERNAL FUNCTION bin_and INTEGER, INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'IB_UDF_bin_and' MODULE_NAME 'ib_udf'
DECLARE EXTERNAL FUNCTION bin_or INTEGER, INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'IB_UDF_bin_or' MODULE_NAME 'ib_udf'
- Не забываем делать COMMIT после каждой команды.
- В дереве объектов базы данных, используя меню по правой нопке мыши, выполняем команды Перекомпилировать процедуры и Перекомпилировать триггеры.
- Если в процессе перекомпиляции позникают ошибки, то вносим исправления в исходный код с помощью команд ALTER TRIGGER или ALTER PROCEDURE и повторно запускаем перекомпиляцию. Если вы не знаете как исправить ошибочный код триггера или процедуры, то временно можно закоментировать все команды между первым BEGIN и последним END. После окончания процесса миграции не забудьте вернуться, раскоментировать код и исправить все ошибки.
- Делаем архивную копию и восстанавливаем базу из архива. ВНИМАНИЕ! При восстановлении БД с установленным флагом Commit after each table могут возникать ошибки. В этом случае следует снять указанный флаг и повторить процедуру восстановления базы из архивной копии.
С серверной частью все. Остается на клиентских машинах:
- Найти все файлы gds32.dll и удалить их.
- С сервера, из подкаталога BIN основного каталога сервера Firebird берем gds32.dll и выкладываем рядом с gedemin.exe.
Запускаем. Проверяем работу.