а у FIB-ов есть возможность указывать клиента?1. Да, у fib+ клиент указывается.
самый простой путь - 2 gbak-а от нужных версий и CMD-файл.
народ даже делал с перенаправлением ouput-потока из одного gbak'а в input-поток второго gbak'а.
Но хочется сделать утилиту для совсем дремучих пользователей, и ещё чтобы как-то контролировался процесс.никогда не стоит недооценивать предсказуемость тупизны. ©
Очень наивно думать, что любая база для 2.0 может быть сконвертирована в 3.0 простым backup-restore. Там список несовместимостей такой, что даже ручками не каждый справится. Не говоря уже о приложении, которое с этой базой работает.]]>
Предполагается использование fb embedded, библиотека fib+ и компоненты TpFIBBackupService/TpFIBRestoreService
Дим, ты как всегда, заранее сгущаешь краски
Очень наивно думать, что любая база для 2.0 может быть сконвертирована в 3.0 простым backup-restore. Там список несовместимостей такой, что даже ручками не каждый справится. Не говоря уже о приложении, которое с этой базой работает.
Очень наивно думать, что любая база для 2.0 может быть сконвертирована в 3.0 простым backup-restore.Между 2.0 и 2.5 уже много различий.
Создается утилита, выполняющая преобразование файла базы из формата fb 2.0 в 3.0.Интересно.
Предполагается использование fb embedded, библиотека fib+ и компоненты TpFIBBackupService/TpFIBRestoreService
Можно ли в одно приложение одновременно загрузить обе версии клиентских библиотек?
А я полностью согласен с SD. backup-restore - это ещё не фига не миграция.Не забудьте всё это учесть, когда будете решать подобные задачи.
Во-первых сам по себе backup-restore будет успешен только когда когда на уровне метаданных устранены все несовместимости.
Во-вторых смена ODS это только первый этап миграции. Потом надо тщательно просматривать само приложение на предмет несовместимостей.
Третьи этапом правим запросы и ХП, где поплыли планы и они стали работать медленнее.
Четвертым этапом надо выискивать узкие места, которые были на предыдущей версии, и если в новой версии появились фичи которые могут улучшить эти места, переписать их.
Зараза такая, снова "искусственный интеллект" TpFIBPlus:
Если отдельно запустить TpFIBRestoreService с "embedded" (локальный коннект) fb 3.0, то рестор отрабатывает.
А если после TpFIBBackupService (с embedded 2.0 или 2.5), то получаю исключение сообщением, что модуль engine12.dll найден, но не загружен.
procedure RemoveClientLibrary(const aLibName:string); var I: Integer; begin EnterCriticalSection(vLibAccess); try for I := 0 to Pred(vClientLibs.Count) do if IIbClientLibrary(vClientLibs[i]).LibraryName=aLibName then begin vClientLibs.Delete(i); Exit end; finally LeaveCriticalSection(vLibAccess); end; end;
var fsvcBackup : TpFIBBackupService; ... begin ... fsvcBackup := TpFIBBackupService.Create(nil); try fsvcBackup.LibraryName := 'путь_fb_20\fb_20_LibraryName.dll'; ... <турник, анжуманя> ... finally fsvcBackyp.Free(); IB_Intf.RemoveClientLibrary('путь_fb_20\fb_20_LibraryName.dll') end
var fsvcRestore : TpFIBRestoreService; ... begin ... fsvcRestore := TpFIBBackupService.Create(nil); try fsvcRestore.LibraryName := 'путь_fb_30\fb_30_LibraryName.dll'; ... <анжуманя, пресс качат> ... finally fsvcRestore.Free(); IB_Intf.RemoveClientLibrary('путь_fb_30\fb_30_LibraryName.dll') end
В общем, вот так всё работает:В одном приложении одновременно две библиотеки firebird "embedded" использовать не получилось.
Жаль, что так и не удалось послушать начальника транспортного цеха ...Задача успешно решена так, как задумывалось, но всё равно интересно, почему вы считаете, что ваш способ более правильный. Расскажите, любопытно. В крайнем случае - просто поболтаем. ]]>
В чём проблема запустить два процесса (по одном на gbak каждой версии)?
Хочется эстетики и перфекционизма - можно реализовать функционал tee и параллельно записать ещё и бэкап исходной базы.